我正在尝试创建一个函数,该函数将创建接口(interface)的新实例,并将该实例分配给具有接口(interface)类型的变量。这是一个简单的示例程序(无法编译):
package main
import (
"fmt"
)
type Foo interface {
Foo(int) int
}
type Foo_impl struct {}
func (f *Foo_impl) Foo(x int) int {
return x * 2
}
func main() {
var x *Foo_impl
constructFoo(x)
fmt.Println("Hello, playground")
}
func constructFoo(x Foo) {
*x = Foo_impl{} // Blows up here - invalid indirect of x (type Foo)
}
是否有可能通过反射间接接口(interface)变量,并分配给底层值?如果我不使用接口(interface),我会做这样的事情,
func main() {
var x int
foo(&x)
fmt.Printf("%d\n", x)
}
func foo(x *int) {
*x = 4
}
正如预期的那样,这将打印出 4。问题是接口(interface)变量不能以正常方式间接访问。有解决办法吗?
最佳答案
但为什么你不能更地道一点,做
func constructFoo() Foo {
return &Foo_impl{}
}
然后,在主要部分:
func main() {
fmt.Println(constructFoo().Foo(10))
}
?
此外,还有 accept interfaces, return structs您可能感兴趣的方法。
希望对您有所帮助。
关于pointers - Go中接口(interface)类型的间接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51046308/