理解「無法取得位址」與「無法呼叫指標方法」錯誤
使用 Go時,可能會遇到錯誤例如“無法取得位址”或“無法呼叫指標方法”,使學習者感到困惑
問題:
考慮以下Go 程式碼:
diff := projected.Minus(c.Origin) dir := diff.Normalize() // error: cannot call pointer method on Vector3 // Vector3 methods func (a *Vector3) Minus(b Vector3) Vector3 { ... } func (a *Vector3) Normalize() Vector3 { ... }
第二行會導致編譯錯誤,因為Vector3.Normalize()需要一個指標接收器,這表示它需要一個指向Vector3 值(*Vector3) 而不是Vector3 的指標接收器,這表示它需要一個指向Vector3 值(*Vector3) 而不是Vector3 的指針value.
為什麼會發生:
函數和方法呼叫的回傳值在Go 中是不可尋址的。因此,在第二個範例中,編譯器無法取得 Vector3.Minus() 結果的位址,從而阻止它對該值呼叫 Normalize()。
可能的解決方案:
以上是為什麼我無法對 Go 函數呼叫的結果呼叫指標方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!