1. 为什么有错误?
必须先处理err再defer file.close()
func main() { file, err := os.Open("test.go") defer func() { err := file.Close() if err != nil { fmt.Println("close error: ", err) } else { fmt.Println("close no error") } }() if err != nil { fmt.Println("failed", err) return } }
2. GO是调用C代码模块,静态库和动态库
3.HTTP和DNS属于应用层协议,TCP输出传输层协议,IP和ARP属于网络层协议
4.内置类型是可以定义method,但指针类型是不能被定义的
5. golang中大多数数据类型都可以转化为有效的JSON文本,除了channel、complex、函数等
6. 错误设计 ABCD
A
如果失败原因只有一个,则返回bool
B
如果失败原因超过一个,则返回error
C
如果没有失败原因,则不返回bool或error
D
如果重试几次可以避免失败,则不要立即返回bool或error
7.
A
switch 中的表达式是可选的,可以省略。如果省略表达式,则相当于 switch true,这种情况下会将每一个 case 的表达式的求值结果与 true 做比较,如果相等,则执行相应的代码。
B
可以在一个 case 中包含多个表达式,每个表达式用逗号分隔。
case "a", "e", "i", "o", "u": //multiple expressions in case
CD
在 Go 中执行完一个 case 之后会立即退出 switch 语句。fallthrough语句用于标明执行完当前 case 语句之后按顺序执行下一个case 语句
8. lock() <-> unlock()
Rlock() <-> Runlock()
9. waitgroup 作为函数参数时必须传入waitgroup的指针