1、代码风格统一 使用goland编辑器,进行Reformat Code,字段使用驼峰命名法
2、Go语言版本使用1.13.4以上,使用go modules进行依赖管理
3、学会经常使用Golang标准库文档,地址:https://studygolang.com/pkgdoc
4、无限循环 - for {循环体语句}
5、for range
遍历数组、切片、字符串、map 及通道(channel)
切片部分如下:
6、判断切片是否为空,请始终使用len(s) == 0
来判断,而不应该使用s == nil
来判断,示例如下:
var s1 []int //len(s1)=0;cap(s1)=0;s1==nil
s2 := []int{} //len(s2)=0;cap(s2)=0;s2!=nil
s3 := make([]int, 0) //len(s3)=0;cap(s3)=0;s3!=nil
7、通过var声明的零值切片可以在append()
函数直接使用,无需初始化
8、使用copy()函数复制切片,指向不同的内存地址
9、从切片中删除元素
删除索引为index
的元素,操作方法是a = append(a[:index], a[index+1:]...)
map部分如下:
10、判断map中键是否存在,格式:value, ok := map[key]
函数部分如下:
11、可变参数通过在参数名后加...
来标识,例如:func intSum3(x int, y ...int) int {}
注意:可变参数通常要作为函数的最后一个参数
12、多返回值,有多个返回值时必须用()
将所有返回值包裹起来
13、如果局部变量和全局变量重名,优先访问局部变量
14、语句块定义的变量,通常我们会在if条件判断、for循环、switch语句上使用定义变量的方式,只在语句块中生效
15、使用type
关键字来定义一个函数类型,type calculation func(int, int) int,凡是满足这个条件的函数都是calculation类型的函数
16、高阶函数分为 - 函数作为参数和函数作为返回值两部分
17、闭包=函数+引用环境,例如如下:
func adder() func(int) int {
var x int
return func(y int) int {
x += y
return x
}
}
var f = adder()
fmt.Println(f(10)) //10
fmt.Println(f(20)) //30
变量f
是一个函数并且它引用了其外部作用域中的x
变量,此时f
就是一个闭包。 在f
的生命周期内,变量x
也一直有效
18、defer
语句能非常方便的处理资源释放问题。比如:资源清理、文件关闭、解锁及记录时间等
19、return
语句在底层并不是原子操作,它分为给返回值赋值和RET指令两步。而defer
语句执行的时机就在返回值赋值操作后,RET指令执行前,具体如下图所示:
20、常用内置函数
close | 主要用来关闭channel |
len | 用来求长度,比如string、array、slice、map、ch |