Golang Map String Struct
现象
下面代码会有报错 cannot assign to p["HM"].age
type Person struct {
name string
age int
}
type People map[string]Person
func main() {
p := make(People)
p["HM"] = Person{"Hank McNamara", 39}
p["HM"].age = p["HM"].age + 1
fmt.Printf("age: %d\n", p["HM"].age)
}
// cannot assign to p["HM"].age
原因
p["HM"]不是一个常规的可寻址值:hashmap可以在运行时增长,然后它们的值在内存中移动,旧的位置就会过时。如果映射中的值被视为常规可寻址值,那么映射实现的那些内部内容将被公开。 因此,p[“HM”]是一个稍微不同的东西,在规范中称为“映射索引表达式”;如果您在规范中搜索短语“索引表达式”,您将看到可以对它们进行某些操作,如读取它们、为它们赋值,并在递增/递减表达式(用于数字类型)中使用它们
解决方案
package main
import "fmt"
type Person struct {
name string
age int
}
type People map[string]*Person
func main() {
p := make(People)
p["HM"] = &Person{"Hank McNamara", 39}
p["HM"].age += 1
fmt.Printf("age: %d\n", p["HM"].age)
}
参考地址
Last updated
Was this helpful?