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())
}

这段代码的合理性体现在:

  1. Person结构体隐式实现了Greetings接口
  2. PersonGreeting函数可以接受任何实现了Greetings接口的类型
  3. 代码展示了接口的多态性,可以轻松扩展其他实现Greetings接口的类型

输出结果:

Yo!
Whats up!
Yo!
Whats up!
回到顶部