使用Gorp 庫進行資料庫存取時(它同時提供DbMap 類型和Transaction 類型),您可能會遇到需要呼叫接口指標上的方法。當您在使用交易時需要執行回溯時,可能會發生這種情況。
要解決程式碼範例中遇到的問題,重要的是要了解在 Go 中不需要傳遞指向介面的指標。與其他語言不同,Go 不使用引用呼叫。相反,僅當您需要修改函數內的原始值時才需要傳遞指針,這通常不是介面值的情況。
問題所在,因為 gorp.SqlExecutor 介面的 Get 方法需要一個指標值作為其第一個參數。但是,您的儲存庫結構嘗試為該參數指派非指標值(*gorp.SqlExecutor),從而導致錯誤訊息。
解決此問題的正確方法是使用指向介面值的指標直接在方法呼叫中。修正後的程式碼如下:
package repositories import ( "github.com/coopernurse/gorp" ) type Repository struct { Gorp gorp.SqlExecutor } func (r *Repository) GetById(i interface{}, key interface{}) interface{} { obj, err := r.Gorp.Get(i, key) if err != nil { panic(err) } return obj }
透過直接使用指向介面的指針,您允許 Get 方法修改原始值,這是回滾事務所必需的。
以上是為什麼在 Go 中呼叫介面指標方法時會出現錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!