Как определить количество значений, возвращаемых функцией - PullRequest
0 голосов
/ 25 декабря 2018

Как получить длину возвращаемого значения функции, эффект будет аналогичен приведенному ниже:

func Foo() (int, int){
    ...
}
func Bar() (int, float, bool, string, error){
    ...
}
n1 := getReturnLength(Foo) // shall be 2
n2 := getReturnLength(Bar) // shall be 5

Как мне сделать, чтобы реализовать функцию getReturnLength или что-то равное?

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Не следует использовать отражение для помещения возвращаемых значений функции в срез.Скорее, вы должны вернуть итерации среза в диапазоне результатов

package main

import (
"fmt"
)

func foo(num int) []int {

    s := make([]int, num)

    for i := 1; i <= num; i++ {
        s[i-1] = i
    }

    return s
}

func main() {
    r := foo(5)

       // Will run 0 times if len(r) == 0
       // Obviously, if you need 1+
       // results, you need to guard this
      // with something like 
      //   if len(r) < 1...
    for i := range r {
        fmt.Printf("Hello, %d!\n", r[i])
    }

    // Or, simpler
    for i, v := range foo(5) {
        fmt.Printf("Index %d => Value %d\n", i, v)
    }
}
0 голосов
/ 25 декабря 2018

Вы можете достичь этого, используя пакет отражения.

reflect.TypeOf(Foo).NumOut()

Подробнее об упаковке пакета можно узнать здесь https://golang.org/pkg/reflect/#Type

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...