Golang 中呼叫介面指標的方法
在使用Gorp 函式庫存取資料庫時,開發者常會遇到需要呼叫介面指標方法的情況接口指針,同時保持回滾事務的能力。此問題是由於需要將 Gorp DbMap 或 Transaction 實例作為字段屬性傳遞而引起的。
問題
如範例程式碼所示,嘗試呼叫方法在 SqlExecutor 介面上使用指標引用會導致未定義的方法錯誤。發生這種情況是因為類型 *gorp.SqlExecutor 沒有 Get 方法,而 gorp.SqlExecutor 介面本身有。
解決方案
潛在的誤解在於假設將指標傳遞給介面值提供與其他語言中的引用呼叫相同的行為。在 Go 中,使用介面指標有兩個具體原因:
這些原因都不適用於介面指針,因為介面值已經很小,無法通過介面值本身。相反,有必要修改儲存在介面值中的值,該值通常是指向實際結構的指標。
正確實作
要解決此問題,程式碼應避免傳遞指向 Gorp「物件」的指針,而應直接傳遞介面值。以下程式碼正確地實現了這種方法:
package repositories import "github.com/coopernurse/gorp" type Repository struct { Gorp gorp.SqlExecutor // Pass the interface value directly } func (r Repository) GetById(i interface{}, key interface{}) interface{} { obj, err := r.Gorp.Get(i, key) if err != nil { panic(err) } return obj }
透過按值而不是按引用傳遞介面值,程式碼可以維護所需的功能,同時遵守 Go 中指標的正確用法。
以上是為什麼在 Go 中呼叫介面指標的方法時會出現「未定義方法」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!