Go语言中更新map字段值的方式及需注意的点
Go  /  管理员 发布于 1年前   1527
1.map 中的元素是不可寻址的
如果 map 一个字段的值是 struct 类型,则无法直接更新该 struct 的单个字段
// 无法直接更新 struct 的字段值
type data struct {
name string
}
func main() {
m := map[string]data{
"x": {"Tom"},
}
m["x"].name = "Jerry"
}
2.slice 的元素可寻址
type data struct {
name string
}
func main() {
s := []data{{"Tom"}}
s[0].name = "Jerry"
fmt.Println(s) // [{Jerry}]
}
当然还是有更新 map 中 struct 元素的字段值的方法,有如下 2 个:
使用局部变量
最值直接用赋值的方式来进行处理
// 提取整个 struct 到局部变量中,修改字段值后再整个赋值
type data struct {
name string
}
func main() {
m := map[string]data{
"x": {"Tom"},
}
r := m["x"]
r.name = "Jerry"
m["x"] = r
fmt.Println(m) // map[x:{Jerry}]
}
使用指向元素的 map 指针
使用的直接就是指针,无须寻址
func main() {
m := map[string]*data{
"x": {"Tom"},
}
m["x"].name = "Jerry" // 直接修改 m["x"] 中的字段
fmt.Println(m["x"]) // &{Jerry}
}
但是要注意下边这种误用:
出现如下问题是以内 m [“z”] 并没有给他开辟响应的 data 结构体的内存,因此会出现内存泄露的问题
func main() {
m := map[string]*data{
"x": {"Tom"},
}
m["z"].name = "what???"
fmt.Println(m["x"])
}
更多go语言的注意点,请收藏本站网址:https://www.zongscan.com/
博主 在
2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..xiaoB 在
2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..BUG4 在
你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..博主 在
go语言+beego框架中获取get,post请求的所有参数中评论 @ t1 直接在router.go文件中配就ok..Jade 在
如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号