-
永远不要使用指针指向一个接口类型,因为它已经是一个指针。
-
iota在const关键字出现时将重置为0,const中每增一行常量声明使iota计数加1。
-
当且仅当动态值和动态类型都为nil时,接口类型值才为nil。
-
:= 如果新变量与同名已定义的变量不在同一个作用域中那么Go会新定义这个变量。
-
range表达式是副本参与循环。
-
多重赋值:计算等号左边索引表达式和取址表达式,接着计算等号右边的表达式赋值。
-
i++和i–在Go语言中是语句,不是表达式因此不能赋值给另外的变量,此外没有++i和–i。
-
nil可以用作interface、function、pointer、map、slice和channel的空值。如果不指定变量类型,编译器猜不出变量的具体类型,导致编译错误。
-
有方向的channel不可以被关闭。
-
cap() 函数适用于数组、数组指针、slice、和channel,不适用于map,可以使用len()返回map的元素个数。
-
使用make创建map变量时可以指定第二个参数,不过会被忽略。
-
字面量初始化切片的时候,可以指定索引,没有索引的会在前一个索引基础上加一。
-
函数只能与nil比较。
-
map[key]struct中 struct 是不可寻址的,所以无法直接赋值。
-
从一个基础切片派生的子切片长度大于基础切片的长度。slice[low:high]条件为 0 <= low <= high <= cap(baseSlice)
-
nil 不是关键字。
-
recover()必须在defer()函数中直接调用才有效。
-
goto不能跳转到其他函数或者内层代码。
-
不能在goroutine中使用 sync.WaitGroup.Add(),WaitGroup在调用Wait()后不能在调用Add()方法。
-
底层类型相同的变量可以相互赋值还有一个重要的条件,即至少有一个不是有名类型(named type)
Named Type类型:
内置类型:int、int64、float、float64、string、bool等。
使用关键字type声明的类型。
Unnamed Type是基于已有的Named Type组合一起的类型。例如:struct{}、[]string、interface{}、map[string]bool等。
Unnamed Type不能作为方法的接受者。 -
除init()函数之外,一个包内不允许有其他同名函数。
-
使用type声明一个新类型,它不会继承原有类型的方法集。
-
使用值类型接收者定义的方法,调用的时候使用的是值的副本对副本操作不会影响原来的值。如果想在调用函数中修改原值,可以使用指针接收者定义的方法。
-
map是并发读写不安全的
-
加锁后复制变量,会将锁的状态也复制。
-
Go语言中函数传递都是值传递。
go随手记
最新推荐文章于 2022-02-21 14:30:54 发布