Go泛型函数调用报错Cannot infer T,咨询原因及解决方法
问题解答
这不是语法错误,是Go泛型类型推断的使用限制。
你的泛型函数CreateSlice的类型参数T约束为int | string,但调用时只传入了length参数(类型是int)——编译器没法从这个int类型的参数推断出T到底该选int还是string,因为这两种类型都符合约束,所以会提示"cannot infer T"。
解决办法有两种:
- 显式指定类型参数:调用时明确告诉编译器
T的类型,比如:// 创建int类型的切片 slices.CreateSlice[int](10) // 创建string类型的切片 slices.CreateSlice[string](10) - 修改函数让编译器能自动推断:给函数加一个和
T关联的参数(比如默认值),这样编译器就能从参数类型推断出T:func CreateSlice[T int | string](length int, defaultValue T) []T { s := make([]T, length) // 可选:用默认值填充切片 for i := range s { s[i] = defaultValue } return s } // 调用时编译器自动推断T的类型 slices.CreateSlice(10, 0) // T=int slices.CreateSlice(10, "") // T=string
内容的提问来源于stack exchange,提问作者Andrii Radkevych
相关产品推荐
相关产品推荐

