首頁 >後端開發 >Golang >Go 結構指標方法可以將指標重新指派給不同的實例嗎?

Go 結構指標方法可以將指標重新指派給不同的實例嗎?

Patricia Arquette
Patricia Arquette原創
2024-12-21 02:25:10597瀏覽

Can Go Struct Pointer Methods Reassign Pointers to Different Instances?

結構體指標方法中的指標可以重新指派給其他實例嗎?

理解 Go 中的指標

Go 中的指標與整數一樣,是解釋為記憶體位址的值。要修改 int 類型的變量,需要傳遞指向該指針 (int) 的指針,然後為指向的對象 (*i) 分配一個新值。

修改結構體指標方法中的指標

但是,結構體接收者方法不能是指向接收者類型的指標(*T)的指標。相反,有兩個選項:

  • 選項1:非方法函數

定義一個採用**T 的非方法函數指標並修改指向的對象。

  • 選項2:傳回修改後的物件指標

從方法中傳回修改後的指針,並請呼叫者將其指派給包含樹指標的變數。

解決問題

從方法傳回修改後的指標是 Go 中常見的做法。例如,append() 函數既將元素追加到切片,又傳回修改後的切片,呼叫者必須指派該切片。

範例程式碼

使用選項1,將樹向左旋轉到根的解決方案是be:

func rotateLeftToRoot(ptree **AvlTree) {
    tree := *ptree
    if tree == nil {
        return
    }
    prevLeft := tree.left
    if prevLeft != nil {
        tree.left = prevLeft.right
        prevLeft.right = tree
        tree = prevLeft
    }
    *ptree = tree
}

結論

雖然不建議在Go中的結構指針方法中重新分配指針,但上面概述的兩個選項提供了修改樹結構的替代方案。傳回修改後的指標並讓呼叫者分配它是 Go 程式設計中常見且有效的方法。

以上是Go 結構指標方法可以將指標重新指派給不同的實例嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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