pointers - Go中接口(interface)类型的间接

标签 pointers go

我正在尝试创建一个函数,该函数将创建接口(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/

相关文章:

c - 访问作为双指针传递给函数的 Typedef 结构指针。函数内部访问

c - 在我不应该的情况下在没有警告的情况下获得分配?

go - 在golang中使用gin包为特定路由表达中间件?

go - 我应该如何在golang中传递参数?

c - 数组问题C的动态分配

arrays - Fortran:哪种方法可以更快地更改数组的等级? ( reshape 与指针)

c - C 中的链表,最后一个节点指向 NULL?

go - 跨多个 goroutine 使用单个互斥锁

go - 尝试从JSON响应中获取 “Total”的值

go - 一个通用的 http 处理程序而不是几个