当前位置: 首页 > 面试题库 >

Golang返回函数的值作为另一个的输入参数

席言
2023-03-14
问题内容

如果我有

func returnIntAndString() (i int, s string) {...}

我有:

func doSomething(i int, s string) {...}

然后,我可以成功执行以下操作:

doSomething(returnIntAndString())

但是,假设我要在doSomething中添加另一个参数,例如:

func doSomething(msg string, i int, s string) {...}

如果我这样称呼,Go在编译时会抱怨:

doSomething("message", returnIntAndString())

带有:

main.go:45: multiple-value returnIntAndString() in single-value context
main.go:45: not enough arguments in call to doSomething()

有没有办法做到这一点,还是我应该放弃并将返回值分配returnIntAndString给某些引用,并将msg和这些值传递给doSomething(msg, code, str)


问题答案:

在规范中对此进行了描述。它要求内部函数返回所有参数的正确类型。没有多余的参数以及返回多个值的函数。

作为一种特殊情况,如果一个函数或方法g的返回值数量相等并且可以分别分配给另一个函数或方法f的参数,则调用f(g(parameters_of_g))将在绑定返回值后调用f
g到f的参数顺序。f的调用除g的调用外不得包含任何其他参数,并且g至少应具有一个返回值。如果f具有final
…参数,则会为其分配g的返回值,这些返回值在分配常规参数后仍保留。

func Split(s string, pos int) (string, string) {
  return s[0:pos], s[pos:]
}

func Join(s, t string) string {
  return s + t
}

if Join(Split(value, len(value)/2)) != value {
  log.Panic("test fails")
}

如果不满足这些特定条件,则需要分配返回值并分别调用该函数。



 类似资料:
  • 出于我无法控制的原因,我必须在我的C代码中实现这个函数: 调用此函数时,编译器是否忽略它,或者是否仍然进行调用?例如: 两行代码的执行时间是相同的,还是第一行需要更长的时间?

  • 问题内容: 是否可以通过C语言函数API或通过使用其中将回调函数作为参数的参数在Postgres中创建用户定义的函数? 据我所知,没有办法通过C语言API来执行此操作,因为它仅接受sql数据类型,而没有的数据类型。但是也许我想念什么? 问题答案: 我认为您不能,但是由于没有匿名函数,因此应该传递函数名。

  • 如果指针类型作为函数参数,修改形参会影响实参 不能将函数内的指向局部变量的指针作为返回值,函数结束指向空间会被释放 可以将函数内的局部变量作为返回值,本质是拷贝一份

  • 问题内容: 我一直在尝试为JavaScript中动态创建的“ a”标签的onclick事件分配一个函数。所有标记均按如下所示循环创建: 所有四个链接的警报值始终为“ 4”。很明显。谷歌搜索时,我遇到了显示以下代码片段的帖子: 我设法根据需要对其进行了调整,并使alert(i)正常工作,但是如果有人可以确切解释以上代码的作用,我将不胜感激。 问题答案: 当您将功能分配给单击处理程序时,将创建一个闭包

  • 问题内容: 在Python中,我想编写一个返回另一个函数的函数。返回的函数应该可以通过参数调用,并返回高度和半径为圆柱的体积。 我知道如何从Python中的函数返回 值 ,但是如何返回 另一个函数 ? 问题答案: 使用Python尝试一下: 这样使用它,例如与和: 注意,返回一个函数很简单,只需在函数内部定义一个新函数,然后在最后返回它- 小心地为每个函数传递适当的参数。仅供参考,从另一个函数返回

  • 问题内容: 我是ajax和回调函数的新手,如果我弄错了所有概念,请原谅我。 问题: 我可以将 回调 函数作为参数发送给将执行该回调的另一个函数吗? 问题答案: 对。函数引用与任何其他对象引用一样,您可以将它们传递到您的内心。 这是一个更具体的示例: 您还可以传递以下参数: