Golang中如何在结构体中使用map作为元素
Golang中如何在结构体中使用map作为元素
package main
import (
"fmt"
)
type person struct {
firstName string
lastName string
age int
mapper map[string]int
}
type secretagent struct {
p2 person
kill bool
}
func main() {
p1 := person{
firstName: "Harshit",
lastName: "Singhvi",
age: 30,
mapper: {
"James": 40, // 这一行出现错误
"Chima": 41,
},
}
sa1 := secretagent{
p2: p1,
kill: true,
}
fmt.Println("Printing p1", p1)
fmt.Println(sa1.p2.age)
}
有人能告诉我如何在Golang中使用map作为结构体元素吗?
更多关于Golang中如何在结构体中使用map作为元素的实战教程也可以访问 https://www.itying.com/category-94-b0.html
5 回复
感谢@skillian提供的解决方案。
更多关于Golang中如何在结构体中使用map作为元素的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
嗨,你可以从这里查看如何初始化映射的示例:https://blog.golang.org/go-maps-in-action
该页面上的示例是:
commits := map[string]int{
"rsc": 3711,
"r": 2138,
"gri": 1908,
"adg": 912,
}
在Go语言中,当你在结构体中使用map作为字段时,需要使用正确的语法来初始化map。在你的代码中,错误出现在初始化mapper字段时使用了不正确的语法。
以下是修正后的代码:
package main
import (
"fmt"
)
type person struct {
firstName string
lastName string
age int
mapper map[string]int
}
type secretagent struct {
p2 person
kill bool
}
func main() {
p1 := person{
firstName: "Harshit",
lastName: "Singhvi",
age: 30,
mapper: map[string]int{ // 使用正确的map初始化语法
"James": 40,
"Chima": 41,
},
}
sa1 := secretagent{
p2: p1,
kill: true,
}
fmt.Println("Printing p1", p1)
fmt.Println(sa1.p2.age)
// 访问map中的值
fmt.Println("James的年龄:", p1.mapper["James"])
// 添加新的键值对
p1.mapper["Bob"] = 35
fmt.Println("添加Bob后的map:", p1.mapper)
// 删除键值对
delete(p1.mapper, "Chima")
fmt.Println("删除Chima后的map:", p1.mapper)
}
关键修正点:
- 在初始化
mapper字段时,需要明确使用map[string]int{}语法 - 使用花括号
{}来包含map的键值对,而不是圆括号
运行结果:
Printing p1 {Harshit Singhvi 30 map[Chima:41 James:40]}
30
James的年龄: 40
添加Bob后的map: map[Bob:35 Chima:41 James:40]
删除Chima后的map: map[Bob:35 James:40]
如果需要先声明结构体再初始化map,可以使用以下方式:
p2 := person{
firstName: "John",
lastName: "Doe",
age: 25,
}
p2.mapper = make(map[string]int)
p2.mapper["Alice"] = 28
p2.mapper["Bob"] = 32


