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 欄位為切片,其元素使用迭代進行比較。

更新於: 2023年7月6日

201 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告