英文:
GoLang: create a function that accept an interface (I came from PHP)
问题
在Go语言中,可以使用接口(interface)来实现相同的模式。下面是一个示例:
package main
import "fmt"
type Hello interface {
bar()
}
type Foo struct{}
func (f Foo) bar() {
// do something
fmt.Println("Foo bar")
}
type Bar struct{}
func (b Bar) bar() {
// do something
fmt.Println("Bar bar")
}
type NewClass struct{}
func (nc NewClass) bar(h Hello) {
// do something
h.bar()
}
func main() {
f := Foo{}
b := Bar{}
nc := NewClass{}
nc.bar(f) // 输出:Foo bar
nc.bar(b) // 输出:Bar bar
}
在上面的示例中,我们定义了一个Hello
接口,并在Foo
和Bar
结构体中实现了bar
方法。然后,我们创建了一个NewClass
结构体,并在其中定义了一个bar
方法,该方法接受一个实现了Hello
接口的参数。最后,在main
函数中,我们创建了Foo
和Bar
的实例,并通过NewClass
的bar
方法调用了它们的bar
方法。
希望这可以帮助到你!
英文:
In PHP I can create an interface
interface Hello {
public function bar();
}
And some classes that implements it
final class Foo implements Hello {
public function bar() {
// do something
}
}
final class Bar implements Hello {
public function bar() {
// do something
}
}
Then, I can also create a NewClass::bar() method that accept the interface.
final class NewClass {
public function bar(Hello $hello) {
// do something
}
}
How can I do the same, in Golang?
type humanPlayer struct {
name string
}
type botPlayer struct {
name string
}
How can I realize same pattern in golang?
答案1
得分: 1
包 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("你好 %s\n", n.Name())
}
func main() {
human := &humanPlayer{
name: "鲍勃",
}
bot := &botPlayer{
name: "汤姆",
}
sayName(human)
sayName(bot)
}
英文:
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)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论