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.")
}
说明:
- golang中interface(接口)类型定义了一组方法签名。任何类型只要全部实现了这些方法,就被视为实现了该接口,不需要显式声明。就是典型的:只要你的行为完全具备了鸭子的行为,你就是某种鸭子。
- interface(接口)类型是引用类型
- 空接口类型有一个别名any,任何类型都默认实现了空接口,因此可以使用any接口指向任何类型的数据
- golang中接口类型可以继承/组合,通过接口的继承/组合,golang支持了基于对象的设计。基于接口的面向对象设计,更加聚焦于抽象的接口,而不是抽象的类。golang的类更多的是实体类。这简化了面向对象设计。
- 接口也常用于泛型函数/类的定义.
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END

















暂无评论内容