Go | 初步了解「結構」型別
💬 簡介
在 Go 語言中,結構(struct
)是用來將多個不同型別的資料組合在一起的一種複合型別。結構型別讓我們能夠更方便地管理和操作現實世界中的物件或資料。在本文中,我們將介紹結構的格式、如何定義結構型別,並討論一些注意事項,最後展示如何創建結構實例。
圖片來源:Gophers
🔎 結構型別的格式
1️⃣ 結構的基本格式
結構型別由一組欄位(fields)組成,每個欄位都有名稱和對應的資料型別。每個欄位的型別可以不同,這樣我們可以將多種類型的資料組合在一起。
結構的定義格式如下:
1 | type StructName struct { |
說明:
StructName
是結構的名稱。Field1
、Field2
是欄位的名稱。Type1
、Type2
是欄位的資料型別。
2️⃣ 定義結構範例
假設我們要定義一個表示員工資料的結構型別,包含員工的姓名、年齡和工資:
- 範例
1
2
3
4
5
6
7
8
9
10package 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
4type Person struct { // 結構名稱大寫字母開頭的駝峰式命名
Name string // 欄位名稱首字母大寫,可以外部訪問
Age int // 欄位名稱首字母大寫
}
2️⃣ 結構型別的私有欄位
如果結構欄位的名稱首字母是小寫,則該欄位是私有的,無法在結構外部訪問。這通常用來封裝結構的內部資料,確保資料的隱私性。
- 範例
1
2
3type BankAccount struct {
balance float64 // 小寫首字母,私有欄位
}📝 在這個範例中,
balance
欄位無法在結構外部直接訪問,只能在結構內部使用。
🚀 如何創建結構實例
1️⃣ 創建結構實例的基本方式
要創建結構型別的實例,Go 提供了多種方式。我們可以使用具名欄位或位置參數來創建結構實例。
使用具名欄位創建結構實例
使用具名欄位來創建結構實例是一種非常直觀的方法。每個欄位的值都會被指定給對應的欄位名稱。
- 範例執行結果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14package 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
14package 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
14package 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