1. map[string]struct{xx:yy}中的结构体不能直接修改字段值
解决办法:
a. 使用结构体指针map[string]*struct{xx:yy},这样可以直接修改
b. 替换整个结构体的值
2. defer 函数
对 defer 延迟执行的函数,它的参数会在声明时候就会求出具体值,而不是在执行时才求值,其原理是defer是个函数,会进行压栈,这里的参数要分成两种情况处理:
a. 如果函数参数是具体value,那就是定义defer时的值
b. 如果函数参数是引用value,那是引用的值,而不是实际值,如果引用指向的值变了,那就会跟着变
defer函数内部还可能使用闭包,也相当于是引用
3. 跳出 for-switch 和 for-select 代码块
break 只会跳出 switch/select 语句
return 直接跳出了函数
4. time.After(xxx) 只有在firing后才gc
5. map不支持cap函数,没有容量的概念
6. goroutine只有自己执行完才over,parent goroutine could not kill child goroutine
7. golang的return要拆分成三步:
a. 返回值=xxx,注意这个返回值是golang内部自己定义的新的变量,程序代码中看不到
b. defer 函数,要注意这里如果defer函数修改xxx的值,返回值是不会变的
c. return
forrange