使用 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中文网其他相关文章!