golang返回值过多的参数

huangapple go评论77阅读模式
英文:

golang too many arguments to return

问题

当我将一个函数赋值给变量并尝试调用它时,会抛出一个错误"返回的参数太多"。

package main

import "fmt"

func main() {
  first_name := "Hello"
  last_name := "World!"
  full_name := func() {
    return first_name
  }
  fmt.Println(first_name)
  fmt.Println(last_name)
  fmt.Println(full_name)
}

当你运行这段代码时,会出现错误。错误的原因是在将函数赋值给full_name变量时,函数体内使用了return关键字,但是匿名函数并不需要返回值。所以,你可以将函数体内的return语句删除,代码如下:

package main

import "fmt"

func main() {
  first_name := "Hello"
  last_name := "World!"
  full_name := func() {
    fmt.Println(first_name)
  }
  fmt.Println(first_name)
  fmt.Println(last_name)
  full_name()
}

这样修改后,代码就可以正常运行了。

英文:

When I assign a function to variable and try to invoke it . It throws an error 'too many arguments to return'

package main

import "fmt"

func main() {
  first_name := "Hello"
  last_name := "World!"
  full_name := func() {
    return first_name
  }
  fmt.Println(first_name)
  fmt.Println(last_name)
  fmt.Println(full_name)
}

答案1

得分: 5

你需要将函数定义更改为以下内容:

full_name := func() string {
  return first_name
}

这样你就告诉Go语言你打算从函数中返回一些内容,以及这个内容是什么(在这种情况下是一个字符串)。

然后稍后你可以像这样调用你新创建的函数:

fmt.Println(full_name())
英文:

You need to change your function definition to the following:

  full_name := func() string {
    return first_name
  }

That's how you tell Go that you intend to return something from a function and what that something is (a string in this case).

Then later you should call your newly created function like this:

   fmt.Println(full_name())

答案2

得分: 1

你没有正确声明你的函数。

full_name := func() string{ // 添加返回类型
return first_name
}

即使是匿名函数,参数和返回值也必须声明。由于你没有指定任何返回值,所以不能使用 return xx

另外,请注意 fmt.Println(full_name) 将返回函数的地址,而不是执行函数。请尝试使用 fmt.Println(full_name())

英文:

You didn't declare your function correctly.

full_name := func() string{ // add a return type
   return first_name
}

Even for an anonymous function, arguments and return values must be declared. Since you did not specify any return value, you cannot use return xx.

Also, be aware that fmt.Println(full_name) will return the address of the function, not execute the function. Try fmt.Println(full_name()) instead.

huangapple
  • 本文由 发表于 2016年4月14日 13:27:58
  • 转载请务必保留本文链接:https://go.coder-hub.com/36614509.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定