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


感谢@GreyShatter

我是Go语言的新手,你的解决方案真的很有帮助!!!

再次感谢

对我来说,编译器信息已经足够明确了:

复合字面量中缺少类型声明

由于Go是静态类型语言,你只需要明确指定类型即可。

修正方案:Go Playground - Go编程语言

嗨,你可以从这里查看如何初始化映射的示例: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)
}

关键修正点:

  1. 在初始化mapper字段时,需要明确使用map[string]int{}语法
  2. 使用花括号{}来包含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
回到顶部