The fmt
package does not handle scanning slices, but you can create a utility function which packs the addresses of all the elements:
func packAddrs(n []int) []interface{} {
p := make([]interface{}, len(n))
for i := range n {
p[i] = &n[i]
}
return p
}
And using this, you can scan a whole slice like this:
numbers := make([]int, 2)
n, err := fmt.Fscan(os.Stdin, packAddrs(numbers)...)
fmt.Println(numbers, n, err)
Testing it with fmt.Sscan()
:
numbers := make([]int, 5)
n, err := fmt.Sscan("1 3 5 7 9", packAddrs(numbers)...)
fmt.Println(numbers, n, err)
Output (try it on the Go Playground):
[1 3 5 7 9] 5 <nil>