💣 包导入问题

Go 语言自带源代码库有两个 rand 包,如果同时使用会造成冲突,导入时可利用包的别名机制解决此问题。参见下面示例代码:

  1. import (
  2. math_rand "math/rand"
  3. crypt_rand "crypto/rand"
  4. )
  5. func main() {
  6. math_rand.Seed(time.Now().Unix())
  7. }

💣 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。所以当我们需要使用结构体而又不需要具体属性时可以使用它。