如何通过地址传递给接口

时间:2017-12-12 04:44:08

标签: pointers go types interface type-assertion

我有一个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指针的函数?我一直在环顾四周但没有成功。谢谢!

1 个答案:

答案 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()

你应该去游览:https://tour.golang.org/methods/10

以下是整个代码:https://play.golang.org/p/iQIChLCziG