GoLang:创建一个接受接口的函数(我来自PHP)


GoLang: create a function that accept an interface (I came from PHP)

在PHP中,我可以创建一个接口

interface Hello {
    public function bar();
}

以及一些实现它的类

final class Foo implements Hello {
    public function bar() {
        // do something
    }
}
final class Bar implements Hello {
    public function bar() {
        // do something
    }
}

然后,我还可以创建一个接受接口的NewClass::bar()方法。

final class NewClass {
    public function bar(Hello $hello) {
        // do something
    }
}

在果朗,我怎么能做同样的事?

type humanPlayer struct {
    name string
}
type botPlayer struct {
    name string
}

我怎样才能在戈兰实现同样的模式?

package main
import (
    "fmt"
)
type Namer interface {
    Name() string
}
type humanPlayer struct {
    name string
}
func (h *humanPlayer) Name() string {
    return h.name
}
type botPlayer struct {
    name string
}
func (b *botPlayer) Name() string {
    return b.name
}
func sayName(n Namer) {
    fmt.Printf("Hello %s'n", n.Name())
}
func main() {
    human := &humanPlayer{
        name: "bob",
    }
    bot := &botPlayer{
        name: "tom",
    }
    sayName(human)
    sayName(bot)
}