首頁  >  文章  >  後端開發  >  如何透過 Go 函數中的指標修改值?

如何透過 Go 函數中的指標修改值?

Susan Sarandon
Susan Sarandon原創
2024-10-28 05:10:30558瀏覽

How do I modify values through pointers in Go functions, and what are the different approaches?

在 Go 中透過指標變更值

在 Go 中,將指標傳遞給函數允許直接操作指向的值。但是,在為指標賦值時需要考慮某些細微差別。

在不修改值的情況下分配指標

考慮以下程式碼:

<code class="go">type Test struct {
    Value int
}

func main() {
    var i Test = Test{2}
    var p *Test = &i
    f(p)
    println(i.Value) // 2
}

func f(p *Test) {
    // Assigning a new pointer value
    p = &Test{4}
}</code>

在此程式碼中,p 是指向i 結構體的指針。在 f 函數中,為 p 指派新的指標值不會修改 i 的值。這是因為 p 是 f 中的局部變量,而更改其值只會影響本地副本。

修改指向值

要實際修改 i 的值,您需要變更指向結構的值。這可以透過取消引用運算子 (*) 來完成。例如:

<code class="go">func f(p *Test) {
    p.Value = 4
}</code>

這裡,p.Value 取消引用指標 p 並將值 4 指派給指向結構的 Value 欄位。當 f 返回時,此變更將反映在 i 中。

將指標指派給指標

或者,您可以在 f 函數中修改指標本身。但是,這需要將指標變數 (&p) 的位址傳遞給 f。

<code class="go">func f(p **Test) {
    *p = &Test{4}
}</code>

在這種情況下,*p 取消引用雙指標 p 並分配一個新的指標值,從而有效地更改 p 變數在主要。然而,這種方法並不那麼簡單,並且比直接修改指向的值效率低。

結論

將指標傳遞給函數時,請理解以下內容至關重要:分配新指標(p = &Test{4}) 和修改指向的值( p.Value = 4) 之間的差異。後一種方法允許直接操作結構體值,而前一種方法僅更改指標本身。

以上是如何透過 Go 函數中的指標修改值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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