from https://zhuanlan.zhihu.com/p/41418726
1. 对nil map, nil slice 添加数据必然失败
var m []string
var n map[string]string
m["name"] = "zzz" // 出错
因为仅仅声明的话,map是nil的
所以一般这么创建map
m:=make(map[string]string)
或者
m:=map[string]string{}
2. 对:=的使用, 感觉这个有点过于特别了,一般情况下不会这么使用局部变量
3. 值传递与引用传递
golang中for range
语法非常方便,可以轻松的遍历array
、slice
、map
等结构,但是它有一个特点,就是会在遍历时把当前遍历到的元素,复制给内部变量,具体就是在whoIsDead
函数中的for range
里,会把people
里的每个person
,都复制给p
这个变量,所以对loop中变量的操作,不能影响到原变量
所以如果需要修改到原变量,需要传递struct指针
struct是值类型的数据,要使用指针去操作它
package main import "fmt" type person struct { name string age byte isDead bool } func main() { p := &person{name: "zzy", age: 100} isDead(p) fmt.Println(p) } func isDead(p interface{}) { if p.(*person).age < 101 { p.(*person).isDead = true } }