01.結構體和方法

JJJhr發表於2024-07-09

結構體(Struct)和方法(Method)是 Go 語言中非常重要的概念,用於定義自定義型別和該型別的行為。讓我們來看一下結構體和方法在 Go 中的基本用法和示例。

結構體(Struct)

結構體是一種使用者自定義的資料型別,用於封裝多個不同型別的資料欄位。在結構體中,這些欄位被稱為結構體的成員(Fields)。

定義結構體

結構體透過 typestruct 關鍵字定義,如下所示:

package main

import "fmt"

// 定義結構體
type Person struct {
    Name   string
    Age    int
    Gender string
}

func main() {
    // 建立結構體例項
    var p1 Person
    p1.Name = "Alice"
    p1.Age = 30
    p1.Gender = "Female"

    fmt.Println(p1) // 輸出:{Alice 30 Female}

    // 另一種初始化方式
    p2 := Person{"Bob", 25, "Male"}
    fmt.Println(p2) // 輸出:{Bob 25 Male}
}

匿名結構體

可以在定義時不指定結構體的名稱,稱為匿名結構體。通常用於臨時資料結構的定義:

package main

import "fmt"

func main() {
    // 定義匿名結構體
    p := struct {
        Name   string
        Age    int
        Gender string
    }{
        Name:   "Alice",
        Age:    30,
        Gender: "Female",
    }

    fmt.Println(p) // 輸出:{Alice 30 Female}
}

方法(Method)

方法是一種與結構體關聯的函式,允許結構體例項執行特定的操作。在 Go 中,方法是透過將函式與特定型別關聯而實現的。

定義方法

方法的定義與普通函式類似,但在函式名前面加上接收者(Receiver),即方法所屬的結構體型別。

package main

import "fmt"

// 定義結構體
type Rectangle struct {
    Width  float64
    Height float64
}

// 定義方法:計算面積
func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

func main() {
    // 建立結構體例項
    rect := Rectangle{Width: 10, Height: 5}

    // 呼叫方法
    fmt.Println("Width:", rect.Width)
    fmt.Println("Height:", rect.Height)
    fmt.Println("Area:", rect.Area()) // 呼叫結構體的方法計算面積
}

在上面的例子中,Area() 方法屬於 Rectangle 結構體,透過 (r Rectangle) 指定了該方法的接收者是 Rectangle 型別的例項 r。透過這種方式,可以在方法內部訪問和操作結構體的欄位。

小結

  • 結構體用於封裝多個欄位,定義自定義的複合資料型別。
  • 方法是與結構體關聯的函式,允許對結構體例項進行操作和處理。
  • 使用結構體和方法可以更加靈活和清晰地組織程式碼,提高程式碼的可讀性和可維護性。

相關文章