gpt4 book ai didi

go - 跨多个结构重用函数以满足接口(interface)

转载 作者:IT老高 更新时间:2023-10-28 13:08:43 24 4
gpt4 key购买 nike

是否可以在多个结构中使用相同的函数来满足一个接口(interface)?

例如:

package main

import "fmt"

type Animal interface {
Speak() string
}

type Dog struct {}

func (d Dog) Speak() string {
return "Woof!"
}

type Wolf struct {}

func (w Wolf) Speak() string {
return "HOWWWWWWWWL"
}

type Beagle struct {}

func (b Beagle) Speak() string {
return "HOWWWWWWWWL"
}

type Cat struct {}

func (c Cat) Speak() string {
return "Meow"
}

func main() {
var a Animal
a = Wolf{}
fmt.Println(a.Speak())
}

因为 Wolf 和 Beagle 共享完全相同的函数,所以无论如何都要编写一次该函数,然后在两个结构之间共享它,以便它们都满足 Animal 的要求?

最佳答案

您可以创建一个父结构,该结构由每个“嚎叫”的动物嵌入。父结构实现 Speak() string 方法,这意味着 WolfBeagle 实现了 Animal 接口(interface)。

package main

import "fmt"

type Animal interface {
Speak() string
}

type Howlers struct {
}

func (h Howlers) Speak() string {
return "HOWWWWWWWWL"
}

type Dog struct {}

func (d Dog) Speak() string {
return "Woof!"
}

type Wolf struct {
Howlers
}

type Beagle struct {
Howlers
}

type Cat struct {}

func (c Cat) Speak() string {
return "Meow"
}

func main() {
var a Animal
a = Wolf{}
fmt.Println(a.Speak())
}

https://play.golang.org/p/IMFnWdeweD

关于go - 跨多个结构重用函数以满足接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31997753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com