Golang 菜鸟教程

Golang 控制语句

Golang 函数 & 方法

Golang 结构体

Golang 切片 & 数组

Golang 字符串(String)

Golang 指针

Golang 接口

Golang 并发

Golang 异常(Error)

Golang 其他杂项

Go 结构体比较

Golang中的结构或struct是用户定义的类型,它允许我们在一个单元中创建一组不同类型的元素。任何具有一组属性或字段的真实实体都可以表示为结构。这个概念通常与面向对象编程中的类进行比较。它可以被称为轻量级类,不支持继承,但支持组合。

在Go语言中,可以通过==运算符DeeplyEqual()方法比较两个结构相同的类型并包含相同的字段值的结构。如果结构彼此相等(就其字段值而言),则运算符和方法均返回true;否则,返回false。并且,如果比较的变量属于不同的结构,则编译器将给出错误。让我们借助示例来讨论这个概念:

注意: DeeplyEqual()方法在“ reflect”包下定义。

使用==运算符比较结构体是否相等

//结构相等的概念
//使用==运算符

package main

import "fmt"

//创建一个结构
type Author struct {
    name      string
    branch    string
    language  string
    Particles int
}

func main() {

    //创建变量
    //作者结构
    a1 := Author{
        name:      "Moana",
        branch:    "CSE",
        language:  "Python",
        Particles: 38,
    }

    a2 := Author{
        name:      "Moana",
        branch:    "CSE",
        language:  "Python",
        Particles: 38,
    }

    a3 := Author{
        name:      "Dona",
        branch:    "CSE",
        language:  "Python",
        Particles: 38,
    }

    //使用==运算符检查a1与a2是否相等
    if a1 == a2 {

        fmt.Println("变量a1等于变量a2")

    } else {

        fmt.Println("变量a1不等于变量a2")
    }

    if a2 == a3 {

        fmt.Println("变量a2等于变量a3")

    } else {

        fmt.Println("变量a2不等于变量a3")
    }
}

输出:

变量a1等于变量a2
变量a2不等于变量a3

使用DeepEqual()方法比较结构体是否相等

//使用DeepEqual()方法
package main

import (
    "fmt"
    "reflect"
)

//创建一个结构
type Author struct {
    name      string
    branch    string
    language  string
    Particles int
}

func main() {

    //定义变量
    //作者结构
    a1 := Author{
        name:      "Soana",
        branch:    "CSE",
        language:  "Perl",
        Particles: 48,
    }

    a2 := Author{
        name:      "Soana",
        branch:    "CSE",
        language:  "Perl",
        Particles: 48,
    }

    a3 := Author{
        name:      "Dia",
        branch:    "CSE",
        language:  "Perl",
        Particles: 48,
    }

    //比较a1和a2,使用Deep Equal()方法
    fmt.Println("a1等于a2吗: ", reflect.DeepEqual(a1, a2))

    //比较a2和a3,使用Deep Equal()方法
    fmt.Println("a2等于a3吗: ", reflect.DeepEqual(a2, a3))
}

输出:

a1等于a2吗:  true
a2等于a3吗:  false