如何通过地址传递给采用接口的函数
How to pass by address to function that takes interface
我有一个 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
指针的函数?我一直在环顾四周,但没有成功。谢谢!
你测试过你的代码了吗?我猜不会,因为它按照您期望的方式工作。调用该函数时只需将指针传递给播放器即可。
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()
你应该完成围棋之旅:https://tour.golang.org/methods/10
我有一个 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
指针的函数?我一直在环顾四周,但没有成功。谢谢!
你测试过你的代码了吗?我猜不会,因为它按照您期望的方式工作。调用该函数时只需将指针传递给播放器即可。
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()
你应该完成围棋之旅:https://tour.golang.org/methods/10