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