Go | 不同方式創建結構指標
💬 簡介
在 Go 語言中,創建結構型別的指標有兩種常見方式:使用 &
和 new
。這兩種方法看似相似,但其背後有不同的行為和適用場景。本文將深入探討這兩種方法,幫助你更好地理解它們的差異以及在不同情境下該如何選擇。
圖片來源:Gophers
🔎 使用 &
創建結構指標
&
是一種簡單且直觀的方式,用來取得一個已經初始化的結構實例的指標。當你創建結構並希望同時初始化其欄位時,通常會選擇這種方式。
範例:使用 &
創建結構指標
1 | package main |
📝 在這個範例中,我們使用
&Person{"Alice", 30}
創建了一個Person
結構的指標,並初始化了Name
和Age
欄位的值。這是一種快速且直接的方式。
🛠 使用 new
創建結構指標
Go 語言中的 new
函式用來分配記憶體並返回該類型的指標。使用 new
創建結構指標時,結構的欄位會被初始化為該類型的零值。
- 範例:使用
new
創建結構指標1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
// 使用 new 創建結構指標,並初始化為零值
p := new(Person)
p.Name = "Bob"
p.Age = 25
fmt.Println(p) // &{Bob 25}
}📝 在這個範例中,
new(Person)
創建了一個Person
類型的結構並返回指標。此時,Name
和Age
欄位的初始值分別為空字串""
和0
,然後我們再手動為這些欄位賦值。
⚖️ &
和 new
的區別
雖然 &
和 new
都可以用來創建結構指標,但它們的工作原理略有不同:
&
的行為:- 當使用
&
時,會直接創建一個已初始化的結構實例並返回其指標。 - 這是一種簡單且直觀的方法,適用於當你知道結構的初始化值時。
- 當使用
new
的行為:- 使用
new
時,Go
會創建一個空的結構實例(即欄位會被設為該類型的零值),並返回指標。 - 這樣可以在後續程式碼中修改欄位的值。
- 使用
簡單的比較:
方法 | 行為 | 預設欄位值 | 何時使用 |
---|---|---|---|
& |
創建並初始化結構,返回指標 | 你提供的值 | 當你需要同時初始化欄位時 |
new |
創建空結構,返回指標,欄位為零值 | 零值("" , 0 ) |
當結構欄位需要後續賦值時 |
🚀 何時選擇 &
或 new
?
使用
&
:- 當你需要創建結構並初始化它的欄位時,
&
是最簡單和最直觀的方式。這通常發生在你知道結構欄位的初始值並希望直接初始化它們時。
- 當你需要創建結構並初始化它的欄位時,
使用
new
:- 當你需要創建結構並將其欄位初始化為零值,然後在後續程式碼中修改欄位時,
new
是不錯的選擇。這對於某些特殊情況或需要封裝成為函式的程式碼很有用。
- 當你需要創建結構並將其欄位初始化為零值,然後在後續程式碼中修改欄位時,
🎯 總結
&
和new
都可以用來創建結構指標,但它們有不同的用途和行為。&
用來創建已初始化的結構並返回其指標,適合用於你知道結構欄位值的情況。new
則創建零值結構並返回其指標,適合在後續賦值的情況下使用。
最後建議回顧一下 Go | 菜鳥教學 目錄,了解其章節內容。
註:以上參考了
Go