golang编程实练-接口(interface)

main.go:

package main

import (
    "fmt"
    "strconv"
)

type Talker interface {
    Talk() string
}

type Runner interface {
    Run() string
}

// 接口继承
type TalkerAndRunner interface {
    Talker
    Runner
}

// Person类实现多个接口
type Person struct {
    Name  string
    Speed int
}

func (p *Person) Talk() string {
    return "Hi, my name is " + p.Name
}

func (p *Person) Run() string {
    return "I can run " + strconv.Itoa(p.Speed) + " miles per hour"
}

// 泛型函数
func Func1[T Runner](t T) {
    t.Run()
}

func main() {
    p := &Person{"Steven", 40}
    var t Talker = p
    var r Runner = p
    fmt.Println(t.Talk())
    fmt.Println(r.Run())

    var tr TalkerAndRunner = p
    fmt.Println(tr.Talk())
    fmt.Println(tr.Run())

    // 空接口
    var x1 interface{}
    x1 = "hello"
    println(x1)

    // 空接口的别名
    var x2 any
    x2 = "world"
    println(x2)

      // 调用泛型函数
      Func1(p)
  
    println("done.")
}

说明:

  1. golang中interface(接口)类型定义了一组方法签名。任何类型只要全部实现了这些方法,就被视为实现了该接口,不需要显式声明。就是典型的:只要你的行为完全具备了鸭子的行为,你就是某种鸭子。
  2. interface(接口)类型是引用类型
  3. 空接口类型有一个别名any,任何类型都默认实现了空接口,因此可以使用any接口指向任何类型的数据
  4. golang中接口类型可以继承/组合,通过接口的继承/组合,golang支持了基于对象的设计。基于接口的面向对象设计,更加聚焦于抽象的接口,而不是抽象的类。golang的类更多的是实体类。这简化了面向对象设计。
  5. 接口也常用于泛型函数/类的定义.
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容