在Go中,使用递归扫描一行中的数字

I want to scan a line of integers from stdin into a slice of integers. Each integer is separated by whitespace. Ther would be as many as N integers of user input. I'm trying not to use a for loop. For example,

1 15 16 17

So far, this is my function to perform the task,

var array []int

func read(b int) {
    if b == 0 {
        return
    }
    fmt.Scanf("%d", &array)
    read(b - 1)
}

The idea is to read from the input, 1 15 16 17, and make it into a slice with value [1 15 16 17]

After compiling, I got the error,

Runtime error

For example,

package main

import "fmt"

var a []int

func read(b int) {
    if b == 0 {
        return
    }
    var i int
    _, err := fmt.Scanf("%d", &i)
    if err != nil {
        return
    }
    a = append(a, i)
    read(b - 1)
}

func main() {
    read(4)
    fmt.Println(a)
}

Input:

1 15 16 17<Enter>

Output:

[1 15 16 17]

Not recursive, but just reading integers until stdin is closed or something that can't be converted to an integer is read.

package main

import "fmt"

func main() {
    var array []int
    var i int
    for {
        _, err := fmt.Scan(&i)
        if err != nil {
            break
        }
        array = append(array, i)
        fmt.Println("read number", i, "from stdin, array ", array)
    }
}