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