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()方法 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