从 'golang新手容易犯的三个错误' 中学到的知识点
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
}
}
浙公网安备 33010602011771号