pointers - 如何通过地址传递给采用接口(interface)的函数

标签 pointers go types interface type-assertion

我有一个定义如下的 Character 接口(interface):

type Character interface {
    SomeFunction()
}

Player 结构定义如下:

type Player struct{}

func (r *Player) SomeFunction() { }
// Some fields and other functions....

假设我有一个函数定义为

func TakeInterface(characterValue Character) {
     // Do something
}

问题是,我想通过 addresscharacterValue 作为 Player 传递,以便对它所做的更改将对Player 调用者传入。在Java和C++中,这很容易,但我在Golang中似乎无法弄清楚。我试过类似的方法,

func TakeInterface(characterValue &Character) {
    // Do something that changes characterValue
}

然后传入一个 Player 指针,但是当我尝试传入一个地址时出现错误 *Character.Character is pointer to interface, not interface .

如何通过地址将 Player 传递给采用 Character/Character 指针的函数?我一直在环顾四周,但没有成功。谢谢!

最佳答案

你测试过你的代码了吗?我猜不会,因为它按照您期望的方式工作。调用该函数时只需将指针传递给播放器即可。

func main() {
    p := new(Player)
    TakeInterface(p)
}

或者

func main() {
    p := Player{0}
    TakeInterface(&p)
}

在 Go 中,您可以使用类型或指向类型的指针作为接受接口(interface)的函数的参数,因为两者都满足接口(interface)。您可以同时执行这两项操作:

    var p1 Player
    p1.SomeFunction()
    var p2 *Player
    p2.SomeFunction()

您应该完成围棋之旅:https://tour.golang.org/methods/10

这是完整的代码:https://play.golang.org/p/iQIChLCziG

关于pointers - 如何通过地址传递给采用接口(interface)的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47765489/

相关文章:

c - 我不明白指针在这段代码中是如何工作的?

c++ - 两个类 (A,B) - B 有一个指向类 A 非静态方法的指针

go:如何将定向 channel 传递给接受双向 channel 的函数?

python - 从 numpy 数组获取指针以将图像发送到 C++

c - 从列表中删除值

go - 递归创建具有特定所有者和组的目录

go - 如何在 Golang 中为嵌套数组结构初始化变量?

Java、Hibernate - 如何创建通用 getByColumnValue() 方法?

java - java中如何创建可以存储多种数据类型对象的arraylist类

C++:是否有理由为类型设置alignof > sizeof