一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情
前言
看完本篇,我们将学习到
- Go是否值得学习
- Go有哪些特性
- Go有哪应用场景
- 如何安装Go
为什么是Go?
在有了如C、C++、Java、Python等众多语言,为什么还需要Go呢?我们知道每个语言的出现都是为了解决某些痛点,那Go是为了解决什么呢?我们都知道摩尔定律,这些年 多核计算机的普遍化,我们也能感受到计算机性能的快速提升。而我们现在使用的大多数语言都是在单核时代中设计的,无法很好的适应多核时代。多核时代主要需要解决的并发问题,所以语言的好坏就是看如何解决下面两个问题:
- 如何提供多线程,以便更好的扩展到多核处理器
- 如何解决多线程的通信
Go通过支持语言级别的用户空间线程,即协程(轻量级线程)来解决第一个问题,然后通过消息传递模型来解决第二个问题,防止对数据的争用,也能让数据进行并发处理,更好的利用多核处理器,提高CPU的使用率。
Go的核心特性
- 自动垃圾回收
- 函数多返回值
- 错误处理
- 匿名函数和闭包
- 类型系统
- 并发编程
- 反射
自动垃圾回收
垃圾收集器会在适当的时候对之前分配的不再使用的内存进行回收。我们无需过多的考虑内存管理问题
函数多返回值
Go支持函数有多个返回值,比如我们想同时计算两个数的和和乘积,可以这么写
func SumAndProduct(a, b int)(int, int) {
return a + b, a * b
}
错误处理
未采用传统的try-catch异常捕获机制来进行异常处理,而使用defer关键字用于错误处理流程,并通过内置函数panic、recover完成对异常的抛出和捕获
匿名函数和闭包
在Go中函数作为一等公民,函数可以作为值类型,可以作为变量值和参数传递,支持常规的匿名函数和闭包
f := func(a, b int) int {
return a + b
}
类型系统
没有非常复杂的类型系统,不支持继承和重载,只支持最基本的类型组合功能,并且采用"非侵入式"的接口概念,即接口和类型没有紧密的绑定在一起,修改接口并不会影响实现该接口的类型。
并发编程
引入协程,并通过消息传递进行通信,使得并发编程更加简单和安全,并且能更好适应的多核处理器。
反射
支持大部分的反射功能,可以在运行时获取对象类型的详细信息,动态操作对象,但不支持通过类型字符串创建对象实例。
Go的应用场景
- 云和网络服务
- 命令行工具
- Web开发
- DevOps
安装Go
Windows平台安装
-
前往官网下载安装包(*.MSI)
-
打开MSI文件并根据提示安装
-
打开终端, 输入下面命令
$ go version -
成功输出Go版本信息则安装成功
Mac 平台
-
可以预先安装Homebrew工具
-
在终端输入下面命令安装
$ brew install go -
输入下面命令
$ go version -
成功输出Go版本信息则安装成功
总结
- 设计一门语言需要在开发效率和性能方面进行考虑,Go也是在这两方面进行了平衡,将语言设计得相对简单,并且使用协程和消息传递,使得更好的适应多核处理器,提高CPU性能。
- Go很适合现在这个云时代,现在很多场景都采用Go。