Golang中这个接口的实现是否合理?
Golang中这个接口的实现是否合理?
package main
import "fmt"
type Greetings interface{
SayHello() string
}
type Person struct{
Hello string
}
func (p Person) SayHello() string{
return p.Hello
}
func PersonGreeting(g Greetings){
fmt.Println(g.SayHello())
}
func main() {
illud := Person{Hello: "Yo!"}
harpyja := Person{Hello: "Whats up!"}
PersonGreeting(illud)
PersonGreeting(harpyja)
}
更多关于Golang中这个接口的实现是否合理?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
我对接口还不太熟悉,所以想请教一下我的代码是否都实现得正确。我想知道 Person 是否满足 Greetings 接口,以及 Greetings 接口本身的定义是否是一个好的接口。
更多关于Golang中这个接口的实现是否合理?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你能重新表述一下你的问题吗? 你是想问 Person 是否满足 Greetings 接口,还是想问 Greetings 接口定义本身是否是一个好的接口,或者是其他问题?
这是一个合理的接口实现。代码展示了Go语言接口的隐式实现特性,结构体Person通过实现SayHello()方法自动满足了Greetings接口。
示例代码清晰地展示了接口的使用:
package main
import "fmt"
// 接口定义
type Greetings interface {
SayHello() string
}
// 结构体实现接口方法
type Person struct {
Hello string
}
func (p Person) SayHello() string {
return p.Hello
}
// 函数接受接口类型参数
func PersonGreeting(g Greetings) {
fmt.Println(g.SayHello())
}
func main() {
// 创建Person实例
illud := Person{Hello: "Yo!"}
harpyja := Person{Hello: "Whats up!"}
// 传递Person实例给接受接口的函数
PersonGreeting(illud)
PersonGreeting(harpyja)
// 也可以直接调用方法
fmt.Println(illud.SayHello())
fmt.Println(harpyja.SayHello())
}
这段代码的合理性体现在:
Person结构体隐式实现了Greetings接口PersonGreeting函数可以接受任何实现了Greetings接口的类型- 代码展示了接口的多态性,可以轻松扩展其他实现
Greetings接口的类型
输出结果:
Yo!
Whats up!
Yo!
Whats up!

