发布时间: 2023-11-02 23:05:00
refer to:
这样的代码:
package main import "fmt" func main() { a := make(map[string]interface{}) if a["year"] == nil { a["year"] = 2002 a["value"] = 100 }else{ fmt.Println(" in else") } fmt.Println(a) b := make([]map[string]interface{}, 2) b[0]["year"] = 2001 b[0]["value"] = "200" fmt.Println(b) }
结果为:
go run test3.go map[value:100 year:2002] panic: assignment to entry in nil map goroutine 1 [running]: main.main() /home/xx/test3.go:17 +0x199 exit status 2
可以看出,如果对于某个map (slice), 可以直接用[] 方法,但是对于 []Map 这样的结构,则无法直接赋值。
原因:
因为该slice ( b )被初始化的时候,只是初始化了最外层的slice 结构(或者说是一个动态的array),而slice里面的元素没有被初始化( interface{} ) ,所以是一个nil
nil对象自然就没有 Set["key"] 这样的方法了。
解决办法;
b := make([]map[string]interface{}, 2) b[0] = make(map[string]interface{}) b[0]["year"] = 2001 b[0]["value"] = "200"Back