我有一个定义如下的 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
}
问题是,我想通过 address 将 characterValue
作为 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
关于pointers - 如何通过地址传递给采用接口(interface)的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47765489/