随着 Go 1.18 的正式发布,千呼万唤的泛型也正式推出了。很多新手老鸟都跃跃欲试,想要将泛型用到日常开发中,提升开发效率。
笔者会将日常自己构思到的,或者翻资料看到的,比较好的 Go 泛型使用姿势总结成《Go泛型骚操作》系列文章
思考
- Go 的泛型是不抹除类型的
- Go 的类型可以轻松初始化空值
加在一起,其实可以把 Go 的泛型,变成一种特殊传参模式
package main
import "log"
// 设计一个接口
type Speaker interface {
Say(name string)
}
// HelloSpeaker 实现了 Speaker 接口
type HelloSpeaker struct {
}
func (HelloSpeaker) Say(name string) {
log.Println("Hello,", name)
}
// FuckSpeaker 实现了 Speaker 接口
type FuckSpeaker struct {
}
func (FuckSpeaker) Say(name string) {
log.Println("Fuck,", name)
}
func Say[T Speaker](name string) {
// Go 的特性是,可以轻松初始化出空值
// 此处的 T 实际上成为了一种特别的传参
var speaker T
speaker.Say(name)
}
func main() {
Say[FuckSpeaker]("Alice")
// 打印: Fuck, Alice
Say[HelloSpeaker]("Alice")
// 打印: Hello, Alice
}
版权声明:本文为u011426433原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。