为了账号安全,请及时绑定邮箱和手机立即绑定

如何将参数返回给 Go 中的另一个函数?

如何将参数返回给 Go 中的另一个函数?

Go
波斯汪 2022-05-18 15:48:16
我正在尝试创建一个接受并返回任意数量参数的函数。我遇到了匿名函数:  func AWSApiRetry(awsFunc func()) {        return awsFunc()    }这允许我调用一个函数:AWSApiRetry(func() {                    GetEnvState(sess, ApplicationName, EnvName)                })但是当我尝试从 GetEnvState 检索返回值时(字符串,错误):ElbReady, err := AWSApiRetry(func() {                GetEnvState(sess, ApplicationName, EnvName)            })我收到错误:AWSApiRetry(func literal) used as value如何使用我的 AwsApiretry 函数匿名返回这些类型。它可以是任何数量和类型的返回值,因此它只是一种“传递”并返回被调用的函数返回的任何内容。
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

你不能。

AFAIK 目前的形式是静态类型的。您要做的是创建一个函数/方法,该函数/方法返回编译时未知的类型。按照设计,go 不允许您创建这样的函数/方法


查看完整回答
反对 回复 2022-05-18
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

这个问题大约有一年的时间,但没有人正确识别问题:AWSApiRetry() 函数签名没有返回。您不能分配没有返回值的函数的返回值。

您打算提供的实际 API(定义具有任意签名的函数)可以使用标准反射包中的函数 MakeFunc() 来完成。

如果您想更具体地了解您观察到的需求,我很乐意提出一个具体的解决方案。


查看完整回答
反对 回复 2022-05-18
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

这是否有助于回答您的部分问题?


package main


import "fmt"


func main() {

  GetEnvState := func(i ...int) {

     fmt.Println(i)

  }

  AwsApiretry := func(awsFunc func()) {

     awsFunc()

  }

  AwsApiretry(func() { GetEnvState(1) }) // prt [1]

  AwsApiretry(func() { GetEnvState(1, 2) }) // prt [1 2]

  //ElbReady := AwsApiretry(func() { GetEnvState(1, 2, 3) })

  //fmt.Println(ElbReady) // AwsApiretry(func literal) used as value

}

但我也同意@Cerise 和@Kelsnare 很棒的答案。无法调用返回未知类型的函数/方法。添加 ElbReady 时会出现错误:


AwsApiretry(func literal) used as value


查看完整回答
反对 回复 2022-05-18
  • 3 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信