![map[key]struct 中 struct 是不可寻址的,所以无法直接赋值,第1张 map[key]struct 中 struct 是不可寻址的,所以无法直接赋值,第1张](/aiimages/map%5Bkey%5Dstruct+%E4%B8%AD+struct+%E6%98%AF%E4%B8%8D%E5%8F%AF%E5%AF%BB%E5%9D%80%E7%9A%84%EF%BC%8C%E6%89%80%E4%BB%A5%E6%97%A0%E6%B3%95%E7%9B%B4%E6%8E%A5%E8%B5%8B%E5%80%BC.png)
在对map的值进行赋值 *** 作时,如果map的值类型为struct结构体类型,那么是不能直接对struct中的字段进行赋值的。
例如:
type T struct { n int}func main(){ m := make(map[int]T) m[0].n = 1 //map[key]struct 中 struct 是不可寻址的,所以无法直接赋值 fmt.Println(m[0].n)}报错:
cannot assign to struct fIEld m[0].n in map原因:
map作为一个封装好的数据结构,由于它底层可能会由于数据扩张而进行迁移,所以拒绝直接寻址,避免产生野指针;map中的key在不存在的时候,赋值语句其实会进行新的k-v值的插入,所以拒绝直接寻址结构体内的字段,以防结构体不存在的时候可能造成的错误;这可能和map的并发不安全性相关解决方法:
整体更新map的value部分
type T struct { n int}func main(){ m := make(map[int]T) //m[0].n = 1 //map[key]struct 中 struct 是不可寻址的,所以无法直接赋值 t := m[0] t.n = 1 m[0] = t /*或 t := T{1} m[0] = t */ fmt.Println(m[0].n)}把map的value定义为指针类型
type T struct { n int}func main(){ m := map[int]*T{ 0: &T{},} m[0].n = 1 fmt.Println(m[0].n)} 总结 以上是内存溢出为你收集整理的map[key]struct 中 struct 是不可寻址的,所以无法直接赋值全部内容,希望文章能够帮你解决map[key]struct 中 struct 是不可寻址的,所以无法直接赋值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)