首頁 > 後端開發 > Golang > 為什麼有些 Go Struct Setter 無法修改原始結構?

為什麼有些 Go Struct Setter 無法修改原始結構?

Susan Sarandon
發布: 2025-01-02 17:19:42
原創
524 人瀏覽過

Why Do Some Go Struct Setters Fail to Modify the Original Struct?

了解結構體的 Setter 行為

本文解決了在 Go 中對結構類型使用 setter 函數時遇到的常見誤解。儘管使用了 setter 函數,結構體的值仍然保持不變,而指標 setter 函數成功修改了結構體。

沒有指標的 Setters

當按值傳遞結構體時對於函數,會在函數內建立結構體的副本。因此,對函數內複製的結構體所做的任何修改都不會反映在函數外的原始結構體中。以下程式碼示範了此行為:

type T struct { Val string }

func (t T) SetVal(s string) {
    t.Val = s
}
登入後複製

在此範例中,SetVal 函數被定義為不含指標接收器的 T 方法。當您對結構體 v 呼叫 SetVal 時,會在函數內建立 v 的副本,並且對副本所做的任何變更都不會影響原始結構體 v。這是因為按值傳遞值會建立一個全新的物件。

帶有指標的Setters

相反,當使用指標接收器透過引用傳遞結構體時,該函數接收指向該結構體的指標原始結構,允許對函數外部的實際結構進行修改。以下程式碼說明了此行為:

func (t *T) SetVal2(s string) {
    (*t).Val = s
}
登入後複製

在此範例中,SetVal2 被定義為具有指標接收器的 T 方法。當您對結構體指針呼叫 SetVal2 時,函數會收到指向原始結構體的指針,並且對函數內結構體所做的任何變更都會影響函數外部的原始結構體。這是因為透過引用傳遞指標會共用同一個物件的位址。

結論

按值傳遞結構體和將結構體指標作為結構體傳遞之間的區別在理解Go 中結構的setter 函數的行為時,參數至關重要。透過認識到差異,您可以按預期透過 setter 函數有效地修改結構。

以上是為什麼有些 Go Struct Setter 無法修改原始結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板