Golang 使用struct作为map键

在Golang中,map作为一种特殊的数据结构,可以用于存储一组键值对(key-value pairs)数据。一般情况下,map的键(key)可以是Golang中的任意一种基本数据类型。但是,在某些特殊情况下,我们也可以使用struct类型作为map的键。



如何定义struct类型

在使用struct类型作为map的键时,我们首先需要定义这个struct类型。Golang中的struct类型定义方式如下:

type Person struct {
    name string
    age int
}

在上面的代码中,我们定义了一个名为Person的struct类型,并指定了这个struct类型包含两个字段,分别为name和age,类型分别为string和int。

如何定义map类型

在定义了struct类型之后,我们需要使用这个struct类型作为map的键。因此,我们需要定义一个map类型,并将Person类型作为map的键类型。

type Person struct {
    name string
    age int
}

func main() {
    var people map[Person]int
    people = make(map[Person]int)
}

在上面的代码中,我们定义了一个名为people的map,将Person类型作为键类型,并将整数类型作为值类型。使用make()函数来初始化map变量,此时这个map为空map。

如何给map添加元素

在我们定义好了map变量之后,我们可以通过下面的方式向这个map变量中添加元素:

type Person struct {
    name string
    age int
}

func main() {
    var people map[Person]int
    people = make(map[Person]int)

    people[Person{"Tom", 25}] = 100
    people[Person{"Jerry", 26}] = 200
}

在上面的代码中,我们向people这个map中添加了两个元素,分别为{Person{name: “Tom”, age: 25}, 100}和{Person{name: “Jerry”, age: 26}, 200}。其中,我们使用了Person结构体的值作为map的键。

如何访问map中的元素

在向map中添加元素之后,我们可以根据键来访问map中对应的值。

type Person struct {
    name string
    age int
}

func main() {
    var people map[Person]int
    people = make(map[Person]int)

    people[Person{"Tom", 25}] = 100
    people[Person{"Jerry", 26}] = 200

    fmt.Println(people[Person{"Tom", 25}])
    fmt.Println(people[Person{"Jerry", 26}])
}

在上面的代码中,我们使用fmt.Println()函数输出了键为{Person{name: “Tom”, age: 25}}和{Person{name: “Jerry”, age: 26}}的元素对应的值。

type Person struct {
    name string
    age int
}

func main() {
    var people map[Person]int
    people = make(map[Person]int)

    people[Person{"Tom", 25}] = 100
    people[Person{"Jerry", 26}] = 200

    if _, ok := people[Person{"Tom", 25}]; ok {
        fmt.Println("Tom in the map.")
    } else {
        fmt.Println("Tom not in the map.")
    }

    if _, ok := people[Person{"Spike", 30}]; ok {
        fmt.Println("Spike in the map.")
    } else {
        fmt.Println("Spike not in the map.")
    }
}