Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Golang调用接口指针的方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用 Gorp进行数据库访问,Gorp有一个标准的DbMap类型,以及当你想要回滚时的事务类型.这两种类型都实现了sqlExecutor接口.

因此,我正在针对sqlExecutor接口进行编程,因此如果需要我可以使用事务而无需更改我的代码.

然后我初始化Gorp DbMap或transaction并将其作为字段属性传递.问题是我需要一个指向Gorp“对象”的指针,否则,如果Gorp“对象”通过值而不是引用传递,我将如何使用事务回滚.

然后我得到一条消息,如

r.Gorp.Get undefined (type *gorp.sqlExecutor has no field or method Get)

当我尝试使用我的代码.我该如何调用这些方法

代码示例如下.

package repositories

import (
    "github.com/coopernurse/gorp"
)


type Repository struct {
    Gorp *gorp.sqlExecutor // <<<< Need pointer so I can rollBACk
}

func (r *Repository) GetById(i interface{},key interface{}) interface{} {
    obj,err := r.Gorp.Get(i,key)
    if err != nil {
        panic(err)
    }
    return obj
}
也许你是在思这个问题,或者你仍然可能受到其他语言的“引用来电”影响:

> gorp.sqlExecutor是一个接口,你永远不会使用指向接口值的指针.永远不能. (从技术上讲,这是不真实的,但如果你真的需要一个指向界面的指针,你就会掌握Go足以理解为什么“永远不会”是一个非常好的建议.)
>永远不要虑“按参呼叫”. Go中没有这样的东西.将指针传递给函数不是“按引用调用”.把它留在后面.

我假设您没有尝试使用事务并对非指针接口代码进行回滚?

背景:在Go中你传递一个指向某事物的指针,原因有两个:1)你想要因为你的结构非常大并且你想避免复制或2)你需要因为calee想要修改原文(这是典型的)对于带指针接收器的方法).现在接口值非常小(只有两个字),所以原因1将指针传递给接口值不适用.原因2在大多数情况下不适用,因为传递指向接口值的指针将允许您更改接口值本身,但通常您希望修改存储在接口值中的值.存储在接口值中的这个值通常是一个指针值,它允许通过调用包装指向此结构的指针的接口值来更改结构的值.这听起来很复杂,但不是:新手Go程序员只是不使用指针接口(因为这没有任何好处)和经验丰富的Go程序员不使用指针接口(因为它不会做太多好的)除非他需要修改界面值,通常是在反射过程中.

大佬总结

以上是大佬教程为你收集整理的Golang调用接口指针的方法全部内容,希望文章能够帮你解决Golang调用接口指针的方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。