Go Notes 3
nil channel和已经关闭的channel,常量寻址,断言,cap,不能使用短变量声明设置结构体字段值,slice
1、i++是语句,不是表达式
i++ 和 i– 在 Go 语言中是语句,不是表达式,因此不能赋值给另外的变量,j = i++是错误的
2、nil channel和已经关闭的channel
-
在nil channel 接受或者发送数据都会造成阻塞
-
给一个已经关闭的channel发送数据,引起panic ,从一个已经关闭的channel接收数据,如果缓冲区为空,返回零值。
3、常量寻址问题
1. 常量通常会被编译器在预处理阶段直接展开,作为指令数据使用,所以无法寻址。
2. 变量在运行期间分配内存。
4、各种知识点
-
只接受的 channel 不可以被关闭,发送的channel可以被关闭。
-
函数中声明的变量必须要使用,但可以有未使用的全局变量,函数的参数未使用也可以。
-
自定义的string方法中,不能再用string(包括springf方法),会造成递归。
-
断言,
x:=interface{}(nil) _,c:=x.(interface{})结果中,c 是false的,因为动态类型为nil,断言会失败。 -
cap() 函数可以获取数组,数组指针,slice,channel,的容量,但不能获取 map. 可以用len()获取map的元素个数。
-
slice不能比较,但是可以和nil比较
-
x[2:] ,对于[i:j]j省略的时候,默认为len而不是cap
5、不能使用短变量声明设置结构体字段值
|
|