概述
错误示例
- 刚刚上手,我们都会习惯性的向下面这样赋值 ,示例如下
package main
import "fmt"
type person struct {
name string
age int
sex string
}
func main() {
//建立结构体map
s := make(map[int]person)
//给map赋值
s[1] = person{"tony", 20, "man"}
fmt.Println(s[1])
//修改map里结构体的成员属性的值
s[1].name = "tom"
fmt.Println(s[1].name)
}
- 但是这样一些就会报
mainmain.go:17:12: cannot assign to struct field s[1].name in map
的错误
错误原因
x = y
这种赋值的方式,你必须知道x
的地址,然后才能把值y
赋给x
。- 但
go
中的map
的value
本身是不可寻址的,因为map
的扩容的时候,可能要做key/val pair
迁移 value
本身地址是会改变的- 不支持寻址的话又怎么能赋值呢
解决方法
package main
import "fmt"
type person struct {
name string
age int
sex string
}
func main() {
s := make(map[int]*person)
s[1] = &person{"tony", 20, "man"}
fmt.Println(s[1])
s[1].name = "tom"
fmt.Println(s[1].name)
}
- 由刚刚得推断我们可以发现,只要知道了被修改值的地址,我们就可以修改它了
- 所以我们使用指针和引用保证每次赋值都可以找到地址
- 就可以实现
map
的结构体赋值了
最后
以上就是热心早晨为你收集整理的Go struct 类型的 map 结构体成员不能修改的问题的全部内容,希望文章能够帮你解决Go struct 类型的 map 结构体成员不能修改的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复