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

Go语言闭包报错‘too many arguments to return’技术求助

解决Go闭包代码的编译错误

嘿,作为Go新手碰到闭包的坑太正常了,咱们先逐个拆解你遇到的编译错误,再把代码改对:

错误原因分析

你的代码核心问题是匿名函数没有声明返回类型——Go是强类型语言,编译器需要明确知道函数的返回值类型:

  • 外层的addN匿名函数,你想让它返回一个接收int参数、返回int的函数,但没写返回类型,编译器默认它没有返回值,所以你返回func(n int){...}时就会报错“返回值过多”。
  • 内层的匿名函数同理,你想返回m+n这个整数,但没声明返回int,编译器也会抛出类似错误。
  • 后面两个“used as value”的错误,本质也是因为addN没有返回值,你却把它的调用结果赋值给变量或者直接当值用,自然不被允许。

另外还有个逻辑小问题:你想计算5+6,但直接调用addN(6)得到的是一个新的函数,不是计算结果,应该用addFive(6)来调用返回的闭包。

修正后的代码

package main

func main() {
    // 给外层函数声明返回类型:func(int) int
    addN := func(m int) func(int) int {
        // 给内层函数声明返回类型:int
        return func(n int) int {
            return m + n
        }
    }

    addFive := addN(5)       // 得到绑定了m=5的闭包函数
    result := addFive(6)     // 调用闭包,计算5+6
    println(result)          // 输出11

    // 也可以直接链式调用:addN(5)(6) 得到同样结果
    println(addN(5)(6))
}

运行结果

运行修正后的代码,会输出:

11
11

这样闭包就正确工作了——外层函数addN接收一个整数m,返回一个绑定了m值的内层函数,后续调用这个内层函数时,会用上之前绑定的m和新传入的n相加,这就是闭包“捕获外部变量”的特性啦。

内容的提问来源于stack exchange,提问作者Parikshit Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:42:53