从 '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语法非常方便,可以轻松的遍历arrayslicemap等结构,但是它有一个特点,就是会在遍历时把当前遍历到的元素,复制给内部变量,具体就是在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
    }
}
原文地址:https://www.cnblogs.com/yeyong/p/11016720.html