Like Share Discussion Bookmark Smile

J.J. Huang   2025-03-11   Getting Started Golang 05.結構   瀏覽次數:次   DMCA.com Protection Status

Go | 初步了解「結構」型別

💬 簡介

在 Go 語言中,結構(struct)是用來將多個不同型別的資料組合在一起的一種複合型別。結構型別讓我們能夠更方便地管理和操作現實世界中的物件或資料。在本文中,我們將介紹結構的格式、如何定義結構型別,並討論一些注意事項,最後展示如何創建結構實例。

圖片來源:Gophers


🔎 結構型別的格式

1️⃣ 結構的基本格式

結構型別由一組欄位(fields)組成,每個欄位都有名稱和對應的資料型別。每個欄位的型別可以不同,這樣我們可以將多種類型的資料組合在一起。

結構的定義格式如下:

1
2
3
4
5
type StructName struct {
Field1 Type1
Field2 Type2
// 更多欄位
}

說明:

  • StructName 是結構的名稱。
  • Field1Field2 是欄位的名稱。
  • Type1Type2 是欄位的資料型別。

2️⃣ 定義結構範例

假設我們要定義一個表示員工資料的結構型別,包含員工的姓名、年齡和工資:

  • 範例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package main

    import "fmt"

    // 定義結構 'Employee'
    type Employee struct {
    Name string
    Age int
    Salary float64
    }

    📝 在這個範例中,我們定義了一個 Employee 結構,包含三個欄位:Name(姓名)、Age(年齡)、Salary(工資)。Name 是字串型別,Age 是整數型別,Salary 是浮點數型別。


🔨 定義結構型別

1️⃣ 結構型別的命名規則

Go 語言的結構型別和結構欄位名稱通常遵循駝峰式命名規範(Pascal Case),這意味著結構名稱和欄位名稱的首字母應該大寫。這樣做是為了讓結構的欄位可以被外部訪問。

  • 結構名稱:應該使用大寫字母開頭的駝峰式命名。
  • 欄位名稱:欄位的首字母也應該大寫,這樣才能在結構外部訪問。
  • 範例
    1
    2
    3
    4
    type Person struct { // 結構名稱大寫字母開頭的駝峰式命名
    Name string // 欄位名稱首字母大寫,可以外部訪問
    Age int // 欄位名稱首字母大寫
    }

2️⃣ 結構型別的私有欄位

如果結構欄位的名稱首字母是小寫,則該欄位是私有的,無法在結構外部訪問。這通常用來封裝結構的內部資料,確保資料的隱私性。

  • 範例
    1
    2
    3
    type BankAccount struct {
    balance float64 // 小寫首字母,私有欄位
    }

    📝 在這個範例中,balance 欄位無法在結構外部直接訪問,只能在結構內部使用。


🚀 如何創建結構實例

1️⃣ 創建結構實例的基本方式

要創建結構型別的實例,Go 提供了多種方式。我們可以使用具名欄位或位置參數來創建結構實例。

使用具名欄位創建結構實例

使用具名欄位來創建結構實例是一種非常直觀的方法。每個欄位的值都會被指定給對應的欄位名稱。

  • 範例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package main

    import "fmt"

    type Person struct {
    Name string
    Age int
    }

    func main() {
    // 使用具名欄位創建結構實例
    p := Person{Name: "Alice", Age: 30}
    fmt.Println(p)
    }
    執行結果:
    1
    {Alice 30}

使用位置參數創建結構實例

如果我們不指定欄位名稱,可以使用位置參數來創建結構實例。這種方式要求傳入的參數順序與結構的欄位順序相符。

  • 範例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package main

    import "fmt"

    type Person struct {
    Name string
    Age int
    }

    func main() {
    // 使用位置參數創建結構實例
    p := Person{"Bob", 25}
    fmt.Println(p)
    }
    執行結果:
    1
    {Bob 25}

2️⃣ 使用指標創建結構實例

除了直接創建結構實例外,還可以使用指標來創建結構。這對於需要修改結構內容的情況非常有用。

  • 範例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package main

    import "fmt"

    type Person struct {
    Name string
    Age int
    }

    func main() {
    // 使用指標創建結構實例
    p := &Person{Name: "Charlie", Age: 35}
    fmt.Println(p)
    }
    執行結果:
    1
    &{Charlie 35}

    📝 使用指標創建結構實例時,&操作符會返回一個指向結構的指標,這樣可以在需要修改結構資料的函式中有效地傳遞結構。
    🚨 另外也可以使用 new 函式來創建,但是有一些差異,在後面的文章中會再做簡單介紹,使其更為理解。


⚠️ 注意事項

📌 欄位名稱的大小寫

在 Go 中,結構的欄位名稱大小寫非常重要。如果欄位名稱的首字母是大寫,則該欄位是公開的(Public),可以被其他包或程式碼訪問;如果欄位名稱的首字母是小寫,則該欄位是私有的(Private),只能在結構定義的包內部訪問。

  • 公開欄位:首字母大寫。
  • 私有欄位:首字母小寫。

📌 建議使用指標來創建結構

當你需要修改結構的欄位或傳遞結構時,使用指標來創建結構實例是比較高效的做法。這樣可以避免傳值所帶來的性能開銷,並且可以直接修改結構內部的資料。

🚨 關於「指標結構」在後面的文章中會再做簡單介紹,使其更為理解。


🎯 總結

  • 結構型別是 Go 語言中用來將多個不同型別的資料組合在一起的資料型別。
  • 定義結構型別時,欄位名稱通常遵循駝峰式命名規範,並且首字母大寫使得欄位可公開訪問。
  • 我們可以使用具名欄位或位置參數來創建結構實例,並且也可以使用指標來創建結構,以便在函式中修改結構的內容。
  • 注意結構欄位的大小寫規範,確保資料的公開或私有性符合預期。

最後建議回顧一下 Go | 菜鳥教學 目錄,了解其章節內容。


註:以上參考了
Go