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