💣 包导入问题
Go 语言自带源代码库有两个 rand 包,如果同时使用会造成冲突,导入时可利用包的别名机制解决此问题。参见下面示例代码:
import (
math_rand "math/rand"
crypt_rand "crypto/rand"
)
func main() {
math_rand.Seed(time.Now().Unix())
}
💣 go工具和go编译器版本不匹配
现象:go run xxx.go
时,报错误如下compile: version "go1.14" does not match go tool version "go1.13.6"
。
问题分析:
centos 7 存在两个golang版本
- yum安装的golang 1.13.6
- 二进制安装golang 1.14
go run xxx.go
运行时使用的是 1.13.6,而go编译器是1.14,版本不一致。
解决办法:删除 yum 安装的版本
💣错误处理wrong signature
func TestBitClear(t *testing)
这种写法会导致wrong signature for TestBitClear, must be: func TestBitClear(t *testing.T)
思考题1, 我们可以在结构体中嵌入某个类型的指针类型, 它和普通指针类似,默认初始化为nil,因此在用之前需要人为初始化,否则可能引起错误
思考题2, 空结构体不占用内存空间,但是具有结构体的一切属性,如可以拥有方法,可以写入channel。所以当我们需要使用结构体而又不需要具体属性时可以使用它。