首页 >后端开发 >Golang >为什么在 Go 中调用接口指针方法时会出现错误?

为什么在 Go 中调用接口指针方法时会出现错误?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-08 22:50:11997浏览

Why Do I Get Errors When Calling Methods on Interface Pointers in Go?

在 Go 中调用接口指针上的方法

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn