Как вернуть аргументы другой функции в Go? - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь создать забавный c, который принимает и возвращает любое количество аргументов. Я сталкивался с аномальными функциями:

  func AWSApiRetry(awsFunc func()) {
        return awsFunc()
    }

Это позволяет мне вызывать забаву c:

AWSApiRetry(func() {
                    GetEnvState(sess, ApplicationName, EnvName)
                })

, но когда я пытаюсь получить возвращаемые значения из GetEnvState, которые являются (строка , ошибка):

ElbReady, err := AWSApiRetry(func() {
                GetEnvState(sess, ApplicationName, EnvName)
            })

Я получаю сообщение об ошибке: AWSApiRetry (веселье c литерал) используется в качестве значения

Как использовать веселье AwsApiretry c чтобы вернуть эти типы анонимно. Это может быть любое число и тип возвращаемых значений, так что это просто своего рода «сквозной переход», который возвращает то, что вызывается забавным c.

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

Вы не можете.

AFAIK, в его текущей форме, go имеет статический тип. Что вы хотите сделать, это создать функцию / метод, который возвращает типы, не известные во время компиляции. go, по замыслу, не позволяет вам создать такую ​​функцию / метод

0 голосов
/ 29 февраля 2020

Помогает ли это ответить на часть вашего вопроса?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...