首頁 >後端開發 >Golang >Go 的結構設定器如何處理以值傳遞與按引用傳遞?

Go 的結構設定器如何處理以值傳遞與按引用傳遞?

Barbara Streisand
Barbara Streisand原創
2024-12-14 14:29:15495瀏覽

How Do Go's Struct Setters Handle Pass-by-Value vs. Pass-by-Reference?

理解 Go 中的結構體設定器

在 Go 中,結構體可以透過引用或值傳遞到函數中。當透過引用傳遞時,函數可以修改原始結構。但是,按值傳遞結構會導致在函數內建立該結構的新副本,並且對此副本進行的任何修改都不會更改原始結構。

在提供的程式碼範例中:

type T struct { Val string }

結構體 T 包含一個名為 Val 的字串欄位。

func (t T) SetVal(s string) {
    t.Val = s
}

SetVal 方法以值接收結構體並嘗試修改其 Val 欄位。但是,這並不能按預期工作,因為該函數正在對結構體的副本進行操作。

func (t *T) SetVal2(s string) {
    (*t).Val = s
}

另一方面,SetVal2 方法接收指向結構體的指針,因此可以修改原始結構體結構。這是因為 Go 動態地對指標進行類型檢查,允許函數存取底層結構並直接修改其欄位。

總而言之,必須了解按值傳遞的結構會建立一個新副本,從而防止任何函數內所做的修改不會影響原始結構。要從函數內修改原始結構,必須使用指標透過引用傳遞它。

以上是Go 的結構設定器如何處理以值傳遞與按引用傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn