例如:
func f[t any](t t) t { var result t return result } // this got error ! var fanonymous = func[t any](t t) t { var result t return result }
fanonymous
出现错误,它显示:
Function literal cannot have type parameters
那么,为什么 golang 不允许匿名函数是通用的?
函数字面量不能是泛型的,因为函数字面量会生成函数值,而函数值不能是泛型的。同样,如果您有通用函数,则不能将其用作函数值。例如
func regularfunction() {} func genericfunction[t any]() {} func main() { // fine, since regular function can act as a value var f1 func() = regularfunction // not valid, since a generic function is not a function value // error: "cannot use generic function genericfunction without instantiation" var f2 func() = genericfunction // fine, since the generic function has been instantiated var f3 func() = genericfunction[int] }
换句话说:
// vvvvvvvvvvvvv this is the type of normalFunc var normalFunc func(int) int = func(i int) int { return i + 1 } // vvvvvv what type would go here? var genericFunc = func[T any](t T) T { var result T return result }
变量 fanonymous
不能在此处指定任何类型。泛型函数不是 go 类型系统中的类型;它们只是用于通过类型替换实例化函数的语法工具。