如果map中保存的是一個(gè) struct的 value(非pointer)身诺,那么是不能直接更些那些字段的值的此熬。原因是:map["xxx"] 并不能取到其中的地址甜刻。
package main
type data struct {
name string
}
func main() {
m := map[string]data {"x":{"one"}}
m["x"].name = "two" //error
}
解決方法:1先取出來呻袭,再存進(jìn)去顿天,2用pointer
1先取出來堂氯,再存進(jìn)去
package main
import "fmt"
type data struct {
name string
}
func main() {
m := map[string]data {"x":{"one"}}
r := m["x"]
r.name = "two"
m["x"] = r
fmt.Printf("%v",m) //prints: map[x:{two}]
}
2用pointer
package main
import "fmt"
type data struct {
name string
}
func main() {
m := map[string]*data {"x":{"one"}}
m["x"].name = "two" //ok
fmt.Println(m["x"]) //prints: &{two}
}
附帶說一句,slice是可以取到值的 牌废。
package main
import "fmt"
type data struct {
name string
}
func main() {
s := []data {{"one"}}
s[0].name = "two" //ok
fmt.Println(s) //prints: [{two}]
}