Go 泛型骚操作2-将泛型变成一种特殊传参方式

  • Post author:
  • Post category:其他


随着 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 版权协议,转载请附上原文出处链接和本声明。