結構體指標方法中的指標可以重新指派給其他實例嗎?
理解 Go 中的指標
Go 中的指標與整數一樣,是解釋為記憶體位址的值。要修改 int 類型的變量,需要傳遞指向該指針 (int) 的指針,然後為指向的對象 (*i) 分配一個新值。
修改結構體指標方法中的指標
但是,結構體接收者方法不能是指向接收者類型的指標(*T)的指標。相反,有兩個選項:
定義一個採用**T 的非方法函數指標並修改指向的對象。
從方法中傳回修改後的指針,並請呼叫者將其指派給包含樹指標的變數。
解決問題
從方法傳回修改後的指標是 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中文網其他相關文章!