如何使用fmt.Sscan将整数解析成数组?

Joh*_*rra 2 go

我正在尝试将字符串中的整数列表扫描到数组中(或者,切片)

package main

import "fmt"

func main() {
    var nums [5]int
    n, _ := fmt.Sscan("1 2 3 4 5", &nums)  // doesn't work
    fmt.Println(nums)
}
Run Code Online (Sandbox Code Playgroud)

作为第二个参数,我需要传递什么才能Sscan使其工作?

我知道我可以通过nums[0], nums[1] ...等等,但我更喜欢一个论点.

tom*_*asz 6

我不认为这是一种方便的单行程.如果Sscan需要...interface{},您还需要传递切片接口,因此首先转换您的数组:

func main() {
    var nums [5]int

    // Convert to interfaces
    xnums := make([]interface{}, len(nums))
    for n := range nums {
        xnums[n] = &nums[n]
    }

    n, err := fmt.Sscan("1 2 3 4 5", xnums...)
    if err != nil {
        fmt.Printf("field %d: %s\n", n+1, err)
    }

    fmt.Println(nums)
}
Run Code Online (Sandbox Code Playgroud)

http://play.golang.org/p/1X28J7JJwl

显然,您可以在接口数组中混合使用不同的类型,这样可以更轻松地扫描更复杂的字符串.对于简单的空间限制整数,您可能更好地使用strings.Splitbufio.Scanner与之一起使用strconv.Atoi.