Не следует использовать отражение для помещения возвращаемых значений функции в срез.Скорее, вы должны вернуть итерации среза в диапазоне результатов
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)
}
}