【发布时间】:2017-11-29 16:20:56
【问题描述】:
我需要通过引用传递一个结构类型的接口,如下所示。既然,我不能使用接口指针来构造类型变量,我应该如何更改下面的代码将te值修改为10?。
package main
import (
"fmt"
)
func another(te *interface{}) {
*te = check{Val: 10}
}
func some(te *interface{}) {
*te = check{Val: 20}
another(te)
}
type check struct {
Val int
}
func main() {
a := check{Val: 100}
p := &a
fmt.Println(*p)
some(p)
fmt.Println(*p)
}
谢谢!
P.S 我已经读过将指针传递给接口不是一个很好的做法。请让我知道有什么更好的方法来处理它
【问题讨论】:
-
Go 没有通过引用传递的概念。
-
@Volker:很抱歉这个词的滥用,但我希望你明白我的问题的意图
-
要在 go 中执行类似于 pass-by-reference 的操作,您需要使用指针。
-
@LasseV.Karlsen:你能举个例子吗?我尝试过使用指针但没有成功
-
为什么需要将指针传递给接口?如果您将一个指针传递给您的结构,并且该结构实现了所需的接口,那么您仍然会有一个指向引擎盖下的具体对象的指针。您尝试更改底层对象的事实似乎您可能不了解接口的用途。