这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
1 学习方法
-
选择 goland IDE
-
先看入门代码熟悉
-
学会看Go的官方文档,比如看点builtin包或常用的接口
-
再看Go圣经准确学习
2 从语法点角度看Golang
因为熟悉C++、Java、Python,就从其他语言特征来看Go
-
简洁性,类比Python,C+
- 不用写分号
- if / switch / for 当中的condition可以不用圆括号
() - 定义变量的语法糖,冒等号
:= - 花括号不能省略
-
用切片操作数组,类似Python
- 用 slice_array[left, right] 表示数组的一个左闭右开区间
- 负数不能用来表示从末尾索引
- 切片操作是高效的,因为底层的操作数据一样
-
隐式封包与解包,类似python
-
函数可以返回多个值了
-
接收函数返回值时也可以用多个变量接收
-
用range循环时,对于一次迭代,可以用多个值来接收
-
可以一行代码实现swap
a, b = b, a
-
-
指针操作,类似C++
- 对
变量取地址符用 & - 对
地址取变量用 * - 优化了指针操作,比如隐式地给指针取地址等
- 对
-
用花括号数据作为初始化列表,类似C++
括号内写法的格式类似 JSON
mutable_len_arr := []int{2, 3, 5, 7, 11, 13} // slice literal fixed_len_arr := [6]int{2, 3, 5, 7, 11, 13} // array literal var m = map[string]Vertex{ "Bell Labs": {40.68433, -74.39967}, "Google": {37.42202, -122.08408}, } -
fmt包,类似java
- fmt.Println
- fmt.Scanf
-
函数做为值,类似java函数式接口
- 将方法当参数传递
- 更多扩展
-
Go 特有的
- 变量类型后置
- 关键字 var,make,func,chan,range
- 结构体代替类Class
- 隐式实现interface的约定
- 结构体方法
- 在struct外面定义方法
- 使用接收器 reciver 来实现,而不是 self / this
- 包可见性,用首字母大写约定
- 空定义 nil,不是null
- switch
- 可以省略 condition
- 隐式给 case分支 加 break
- struct、interface 继承
3 进阶的
- goroutine channel
- GC
- 反射
- Go 和 云原生