最近在实习,下班回去十点多了,再加上比较懒,快有两个月没写东西了。今天在开发一个模块的时候是接着上一个人的写的,好不容易各种配置写好了开始跑,发现他踩了一个很容易踩的坑。
把bug抽出来单独写了个文件。
package main
import (
"log"
)
type agent struct {
id int
str string
}
var m map[int]*agent
func main() {
m = make(map[int]*agent)
a := &agent{
id: 1,
str: "hello",
}
log.Println(a)
var ok bool
if a, ok = m[1]; ok {
log.Println("ok")
}
m[1] = a
log.Println(a)
log.Println(a.str)
}
运行一下
可以看到报了无效指针的问题(invalid memory address or nil pointer dereference)。从上面的两个log可以看到,最开始指针是有值的,第二个却没了,原因就出现在那个if判断那里。