也许您对问题的思考过度,或者您可能仍然受到另一种语言的“引用调用”影响:

gorp.SqlExecutor

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

背景:在 Go 中,由于两个原因,您传递指向某事物的指针:

1) 你想这样做,因为你的结构 真的 而且你想避免复制,或者

2) 你需要,因为被调用者想要修改原始的(这对于带有指针接收器的方法来说很典型)。

现在接口(interface)值非常小(只有两个字),所以原因 1,将指针传递给接口(interface)值,不适用。原因 2 在大多数情况下不适用,因为传递指向接口(interface)值的指针将允许您更改 interface value 本身,但大多数情况下您希望修改该值存储内部接口(interface)值。存储在接口(interface)值中的这个值通常是一个指针值,它允许通过调用接口(interface)值上的方法来更改结构的值,该接口(interface)值包装了指向该结构的指针。这听起来很复杂,但实际上并不复杂:新手 Go 程序员只是不使用指向接口(interface)的指针(因为这不会有任何好处),而有经验的 Go 程序员不使用指向接口(interface)的指针(因为它不会做太多好)除非他需要修改接口(interface)值,通常是在反射期间。