golang 修改map 结构体中的值

这篇博客讨论了在Go语言中直接修改map中结构体值的常见错误,并提供了正确的解决方案。通过使用指针作为map的value,可以实现对结构体成员的修改。示例代码展示了如何创建指向结构体的指针并更新其字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见错误

type person struct {
   name string
   city string
   age  int
}

var personMap = make(map[int]person)

p5 := person{
   name: "小王子",
   city: "北京",
   age:  18,
}
p1 := person{
   "wang",
   "hunan",
   12,
}

personMap[p5.age] = p5
personMap[p1.age] = p1

// 修改

//错误示范   常见错误  不能直接修改map 结构体中的值
personMap[p1.age].name = "张三"

正确示范

package main

import (
    "fmt"
)

type person struct {
   name string
   city string
   age  int
}

//go 中的 map 的 value 本身是不可寻址的,因为 map 的扩容的时候,可能要做 key/val pair迁移


func main() {
 
	var personMap = make(map[int]*person)
 
	p5 := person{
		name: "小王子",
		city: "北京",
		age:  18,
	}
	p1 := person{
		"wang",
		"hunan",
		12,
	}
 
	personMap[p5.age] = &p5
	personMap[p1.age] = &p1
    
    fmt.Println(*personMap[p1.age])
    fmt.Println(*personMap[p5.age])
    personMap[p5.age].name = "小陈"
 
	fmt.Println(*personMap[18])
	fmt.Println(*personMap[p1.age])

}

结果演示

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值