假设我有一个名为foo
的泛型 struct ,并从它创建了两个对象.我可以使用reflect.TypeOf()
来确定每种类型的具体类型,如下所示:
package main
import (
"fmt"
"reflect"
)
type foo[T any] struct {
data T
}
func main() {
a := foo[string]{"cheese"}
b := foo[int]{42}
fmt.Println(reflect.TypeOf(a))
fmt.Println(reflect.TypeOf(b))
}
// main.foo[string]
// main.foo[int]
我感兴趣的是只确定这些对象的泛型类型(即foo
),而不确定具体类型(即foo[string]
和foo[int]
).这是否可能,或者我是否需要手动从这些字符串中提取泛型类型(例如,使用正则表达式)?
编辑
Regex可能如下所示:
func GetGenericType(x any) string {
// Get type as a string
s := reflect.TypeOf(x).String()
// Regex to run
r := regexp.MustCompile(`\.(.*)\[`)
// Return capture
return r.FindStringSubmatch(s)[1]
}
fmt.Println(GetGenericType(a))
fmt.Println(GetGenericType(b))
// foo
// foo
我也看到了this question,但这不能回答这个问题,因为它给出的是concrete类型(即main.foo[string]
),而不是泛型类型(即foo
).