ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 新手们容易犯的3个错误总结 [原文](https://www.jb51.net/article/145529.htm) 从golang小白到成为golang工程师快两个月了,我要分享一下新手在开发中常犯的错误,都是我亲自踩过的坑。这些错误中有些会导致无法通过编译,这种错容易发现,而有些错误在编译时不会抛出,甚至在运行时也不会panic,如果缺少相关的知识,挠破头皮都搞不清楚bug出在哪。 >1、对nil map、nil slice 添加数据 请考虑一下这段代码是否有错,然后运行一遍: ```golang package main func main() { var m map[string]string m["name"] = "Tinywan" } ``` 不出意外的话,这段代码将导致一个panic ``` panic: assignment to entry in nil map ``` 这是因为代码中只是声明了map的类型,却没有为map创建底层数组,此时的map实际上在内存中还不存在,即nil map,可以运行下面的代码进行验证: ```golang package main import "fmt" func main() { var m map[string]string if m == nil { fmt.Println("this is nil map") } } ``` 所以想要顺利的使用map,一定要使用内建函数make函数进行创建: ```golang m := make(map[string]string) ``` 使用字面量的方式也是可以的,效果同make: ```golang m := map[string]string{} ``` 以下代码 ```golang package main import ( "fmt" ) func main() { var m map[string]string if m == nil { fmt.Println("this is nil map") } m = make(map[string]string) m["name"] = "Tinywan" fmt.Println(m) m1 := map[string]int{} fmt.Println(m1) m1["age"] = 24 m1["dateTime"] = 20180909 fmt.Println(m1) } ``` 打印结果 ```golang this is nil map map[name:Tinywan] map[] map[age:24 dateTime:20180909] ``` >小结:如果提前使用 `var` 声明了map的类型,则使用make 的时候直接赋值即可,是 `m =` 而不是 `m :=` ,如果使用了 >字面方式直接初始化,则直接使用短语法则可以