在go泛型中,有时候会用到从泛型函数中调用结构体变量的方法
demo:
package main
import "fmt"
type T1 struct {
Name string
Age int
}
func (this T1) F1() string {
return fmt.Sprintf("name: %v", this.Name) + fmt.Sprintf(",age: %v", this.Age)
}
type T2 struct {
Key string
}
func (this T2) F1() string {
return fmt.Sprintf("key: %v", this.Key)
}
func Print1[T T1 | T2](t T) {
// 尝试使用 fmt.Println(t.F1()) 会报错
fmt.Println(t)
}
type I1 interface {
T1 | T2
}
func Print2[T I1](t T) {
// 尝试使用 fmt.Println(t.F1()) 会报错
fmt.Println(t)
}
type I2 interface {
T1 | T2
F1() string
}
func Print3[T I2](t T) {
fmt.Println(t.F1())
}
func main() {
t1 := T1{Name: "hello", Age: 10}
t2 := T2{Key: "key123"}
Print1(t1)
Print1(t2)
Print2(t1)
Print2(t2)
Print3(t1)
Print3(t2)
}