gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:43:51 26 4
gpt4 key购买 nike

我有一个定义如下的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com