在go語言中,給一個空切片增添元素是允許的,但給maps作相同的操作會引起警告:
來看示例,給一個空的maps賦值
package main
func main() {
var m map[string]int
m["one"] = 1 //error
}
panic: assignment to entry in nil map
goroutine 1 [running]:
main.main()
/Users/codoon/hello.go:5 +0x66
goroutine 2 [runnable]:
runtime.forcegchelper()
/usr/local/go/src/runtime/proc.go:90
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2232 +0x1
goroutine 3 [runnable]:
runtime.bgsweep()
/usr/local/go/src/runtime/mgc0.go:82
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2232 +0x1
exit status 2
給一空的slice卻是ok的:
package main
func main() {
var s []int
s = append(s, 1)
}
竊以為slice與maps的數據結構不一樣,slice是可以鏈式的,要吧動態的擴展,但maps是k:v形式的,k本身需要hash的...留待驗證。