Golang 版本 19.3
golang的泛型在作为函数传参使用时,如果需要再函数内对泛型的实际类型进行判断,做出不同的处理,泛型本身是无法进行类型判断的,需要将参数转为interface后,再进行类型判断。
package main
import "fmt"
type Aa struct {
}
func (a *Aa) Print() {
fmt.Println(1)
}
type Bb struct {
}
func (b *Bb) Print() {
fmt.Println(2)
}
func main() {
try(&Aa{}).Print()
try(&Bb{}).Print()
}
func try[T *Bb | *Aa](b T) T {
var c interface{} = b
switch c.(type) {
case *Bb:
c.(*Bb).Print()
case *Aa:
c.(*Aa).Print()
}
return b
}