我有一个Character
接口,定义如下:
type Character interface {
SomeFunction()
}
Player
结构定义如下:
type Player struct{}
func (r *Player) SomeFunction() { }
// Some fields and other functions....
假设我有一个定义为
的函数func TakeInterface(characterValue Character) {
// Do something
}
问题是,我想通过地址将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
指针的函数?我一直在环顾四周但没有成功。谢谢!
答案 0 :(得分:2)
您是否测试过代码?我猜不是,因为它按照你期望的方式工作。只需在调用函数时将指针传递给播放器。
func main() {
p := new(Player)
TakeInterface(p)
}
或者
func main() {
p := Player{0}
TakeInterface(&p)
}
在go中,您可以使用类型或指向类型的指针作为接受接口的函数的参数,因为它们都满足接口。你可以做到这两点:
var p1 Player
p1.SomeFunction()
var p2 *Player
p2.SomeFunction()