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

我正在尝试创建一个接受并返回任意数量参数的函数。我遇到了匿名函数:


  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 函数匿名返回这些类型。它可以是任何数量和类型的返回值,因此它只是一种“传递”并返回被调用的函数返回的任何内容。


波斯汪
浏览 94回答 3
3回答

宝慕林4294392

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

白猪掌柜的

这个问题大约有一年的时间,但没有人正确识别问题:AWSApiRetry() 函数签名没有返回。您不能分配没有返回值的函数的返回值。您打算提供的实际 API(定义具有任意签名的函数)可以使用标准反射包中的函数 MakeFunc() 来完成。如果您想更具体地了解您观察到的需求,我很乐意提出一个具体的解决方案。

慕婉清6462132

这是否有助于回答您的部分问题?package mainimport "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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go