理解 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中文網其他相關文章!