杜龙少(sdvdxl)

golang容易忽略导致入坑的方面

Word count: 436 / Reading time: 2 min
2016/03/15 Share

main 函数

main函数必须定义在main包里不可导出main函数调用完毕程序就会立即退出不会等待运行中的goroutine运行完毕

初始化函数

func init() { … }

此函数无参不需显示调用

此函数根据依赖顺序执行初始化顺序并且是顺序执行

A 依赖 B B 依赖 C并且ABC 都有init函数那么初始化顺序是CB A

iota

  • iota 只能用在const定义的常量上

  • iota在一个const范围不管中间的变量有没有用到iotaiota都是持续递增加1

1
2
3
4
5
6
7
8
9
10
11
12

const (

aa = iota

bb

cc = 3

dd = iota

)

dd 是3

  • 如果重新定义const那么值会是重新从0开始
1
2
3
4
5
6

const (

ee = iota

)

类型断言

x.(T) x为变量 T为要判断的类型其中有两种用法

  • a := x.(T)如果x是类型T的实现类型变量那么可以得到转换后的值a否则panic: interface conversion: (x的类型) is not package.T: missing method T的方法

  • a, ok := x.(T)如果x是类型T的实现的类型变量那么oktrue 转换成功否则okfalse说明转换失败

Panic中恢复

需要用到build-in recover()方法函数原型

func recover() interface{}

要捕获panic必须在有可能发生panic的地方的上面进行处理

1
2
3
4
5
6
7
8
9
10

defer func(){

if err := recover(); err !=nil {

//处理错误

}

}()

一般来说会将上面的代码放在函数或者方法的开始的地方

注意 recover函数只能用在defer否则不会进行错误捕获

CATALOG
  1. 1. main 函数
  2. 2. 初始化函数
  3. 3. iota
  4. 4. 类型断言
  5. 5. 从 Panic 中恢复