You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:27:28