Golang中的結(jié)構(gòu)或struct是用戶定義的類型,它允許我們?cè)谝粋€(gè)單元中創(chuàng)建一組不同類型的元素。任何具有一組屬性或字段的真實(shí)實(shí)體都可以表示為結(jié)構(gòu)。這個(gè)概念通常與面向?qū)ο缶幊讨械念愡M(jìn)行比較。它可以被稱為輕量級(jí)類,不支持繼承,但支持組合。
在Go語(yǔ)言中,可以通過(guò)==運(yùn)算符或DeeplyEqual()方法比較兩個(gè)結(jié)構(gòu)相同的類型并包含相同的字段值的結(jié)構(gòu)。如果結(jié)構(gòu)彼此相等(就其字段值而言),則運(yùn)算符和方法均返回true;否則,返回false。并且,如果比較的變量屬于不同的結(jié)構(gòu),則編譯器將給出錯(cuò)誤。讓我們借助示例來(lái)討論這個(gè)概念:
注意: DeeplyEqual()方法在“ reflect”包下定義。
//結(jié)構(gòu)相等的概念
//使用==運(yùn)算符
package main
import "fmt"
//創(chuàng)建一個(gè)結(jié)構(gòu)
type Author struct {
name string
branch string
language string
Particles int
}
func main() {
//創(chuàng)建變量
//作者結(jié)構(gòu)
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,
}
//使用==運(yùn)算符檢查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"
)
//創(chuàng)建一個(gè)結(jié)構(gòu)
type Author struct {
name string
branch string
language string
Particles int
}
func main() {
//定義變量
//作者結(jié)構(gòu)
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