go教程4

结构体相等性(Structs Equality)

结构体是值类型。如果它的每一个字段都是可比较的,则该结构体也是可比较的。如果两个结构体变量的对应字段相等,则这两个变量也是相等的

package main

 

import ( 

    "fmt"

)

 

type name struct { 

    firstName string

    lastName string

}

 

 

func main() { 

    name1 := name{"Steve", "Jobs"}

    name2 := name{"Steve", "Jobs"}

    if name1 == name2 {

        fmt.Println("name1 and name2 are equal")

    } else {

        fmt.Println("name1 and name2 are not equal")

    }

 

    name3 := name{firstName:"Steve", lastName:"Jobs"}

    name4 := name{}

    name4.firstName = "Steve"

    if name3 == name4 {

        fmt.Println("name3 and name4 are equal")

    } else {

        fmt.Println("name3 and name4 are not equal")

    }

}

在线运行程序

在上面的代码中,结构体类型 name 包含两个 string 类型。由于字符串是可比较的,因此可以比较两个 name 类型的结构体变量。

上面代码中 name1 和 name2 相等,而 name3 和 name4 不相等。该程序会输出:

name1 and name2 are equal 

name3 and name4 are not equal

如果结构体包含不可比较的字段,则结构体变量也不可比较

package main

 

import ( 

    "fmt"

)

 

type image struct { 

    data map[int]int

}

 

func main() { 

    image1 := image{data: map[int]int{

        0: 155,

    }}

    image2 := image{data: map[int]int{

        0: 155,

    }}

    if image1 == image2 {

        fmt.Println("image1 and image2 are equal")

    }

}

在线运行程序

在上面代码中,结构体类型 image 包含一个 map 类型的字段。由于 map 类型是不可比较的,因此 image1 和 image2 也不可比较。如果运行该程序,编译器会报错:main.go:18: invalid operation: image1 == image2 (struct containing map[int]int cannot be compared)

posted @ 2024-01-23 10:30  易先讯  阅读(2)  评论(0编辑  收藏  举报