В 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)
}
Других решений пока нет …