## 新手们容易犯的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 :=` ,如果使用了
>字面方式直接初始化,则直接使用短语法则可以