首頁 >後端開發 >Golang >如何修改 Go 函數中的結構體欄位?

如何修改 Go 函數中的結構體欄位?

DDD
DDD原創
2024-12-17 05:51:25835瀏覽

How Can I Modify Struct Fields within a Go Function?

透過指標傳遞結構體來修改欄位

在Go 中,結構體是按值傳遞的,這表示函數內對結構體所做的任何更改都不會反映出來在原始結構中。當您想要修改函數中結構體的欄位時,這可能會出現問題。

考慮以下程式碼:

type Point struct {
  x, dx int
}

func (s Point) Move() {
  s.x += s.dx
  log.Printf("New X=%d", s.x)
}

func (s Point) Print() {
  log.Printf("Final X=%d", s.x)
}

func main() {
  st := Point{ 3, 2 };
  st.Move()
  st.Print()
}

在此程式碼中,Move 方法嘗試修改Point 結構體的x 字段,但由於結構體是按值傳遞的,因此Move 方法中對結構體所做的更改不會反映在原始結構體中。因此,Print 方法輸出 x 的原始值 (3),而不是更新後的值 (5)。

要解決此問題,我們需要將 Point 結構體透過指標傳遞給 Move 方法。透過指標傳遞結構體,我們傳遞了對原始結構體的引用,因此 Move 方法中對結構體所做的任何更改都會反映在原始結構體中。

以下是更正後的程式碼:

type Point struct {
  x, dx int
}

func (s *Point) Move() {
  s.x += s.dx
  log.Printf("New X=%d", s.x)
}

func (s *Point) Print() {
  log.Printf("Final X=%d", s.x)
}

func main() {
  st := Point{ 3, 2 };
  st.Move()
  st.Print()
}

透過此更改,Move 方法可以正確修改Point 結構體的x 字段,並且Print 方法輸出更新後的x 值(5) 。

以上是如何修改 Go 函數中的結構體欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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