Go語言程式,用於比較兩個該結構體的例項是否相等,同時考慮切片中的值
結構體(struct)在面向物件程式設計中類似於類,可以將不同的欄位放置在結構體中,這些欄位可以在以後實現,並且具有特定的型別,例如 int、float、string 等。在本文中,我們將編寫一個 Go 語言程式來比較兩個結構體的相等性。
語法
func len(v Type) int
len() 方法返回任何引數的長度。它接受一個輸入,即我們要知道其長度的資料型別變數。
func range(variable)
range 函式遍歷任何資料型別。要使用它,我們必須首先放置 range 關鍵字,然後是我們要遍歷的資料型別。
演算法
步驟 1 − 該程式匯入 main 和 fmt 作為必要的包
步驟 2 − 建立一個名為 MyStruct 的結構體,包含三個欄位:Id 型別為 int,Name 型別為 string,Items 型別為 int 的切片
步驟 3 − 建立一個 main 函式
步驟 4 − 在 main 函式中,建立一個名為 struct1 的結構體,併為其實現 ID、Name 和 Items 欄位。
步驟 5 − 在此步驟中,建立一個名為 struct2 的結構體,並與步驟 4 類似地為 struct2 實現欄位。
步驟 6 − 然後,呼叫 compare_structs 函式,傳入兩個輸入 struct1 和 struct2,並將返回值儲存在 isEqual 變數中。
步驟 7 − 在 compare_structs 函式中,首先檢查 id 或 name 是否不相等,如果不相等則返回 false。
步驟 8 − 在此步驟中,比較結構體 Items 的長度,如果它們不相等則返回 false。
步驟 9 − 然後,為 struct1 的 Items 執行一個迴圈,每次迭代時,將這些 Items 與 struct2 的 Items 進行比較,如果它們不相同則返回 false。
步驟 10 − 但是如果它們相同,則在迴圈終止後返回 true。
步驟 11 − 使用 fmt 包中的 Println 函式在控制檯上列印一個布林值,即 false 或 true,其中 ln 表示換行。
示例
在本示例中,我們將編寫一個 Go 語言程式,透過比較兩個結構體的長度、欄位值和欄位中的 Items 來比較它們的相等性。
package main import "fmt" type MyStruct struct { ID int Name string Items []int } func main() { struct1 := MyStruct{ ID: 1, Name: "Struct 1", Items: []int{10, 20, 30}, } struct2 := MyStruct{ ID: 20, Name: "Struct 2", Items: []int{10, 20, 30}, } isEqual := compare_structs(struct1, struct2) fmt.Println("Are the structs equal?") fmt.Println(isEqual) } func compare_structs(s1, s2 MyStruct) bool { if s1.ID != s2.ID || s1.Name != s2.Name { return false } if len(s1.Items) != len(s2.Items) { return false } for i := range s1.Items { if s1.Items[i] != s2.Items[i] { return false } } return true }
輸出
Are the structs equal? False
結論
在本文中,我們討論瞭如何比較兩個結構體的相等性。我們編譯並執行了比較結構體例項的程式,使用兩個結構體,其中一個 Items 欄位為切片,其元素使用迭代進行比較。