go - 如何使用 fmt.Sscan 将整数解析为数组?

标签 go

我正在尝试将一个整数列表从一个字符串扫描到一个数组(或者一个 slice )中

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)
}

为了让它工作,我需要将什么作为第二个参数传递给 Sscan

我知道我可以传递 nums[0]、nums[1] ... 等,但我更喜欢单个参数。

最佳答案

我不认为这是一种方便的单线方式。由于 Sscan 采用 ...interface{},您还需要传递接口(interface) slice ,因此首先转换您的数组:

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)
}

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

显然,您可以在接口(interface)数组中混合使用不同的类型,这样可以更轻松地扫描更复杂的字符串。对于空间有限的整数,您最好使用 strings.Splitbufio.Scanner 以及 strconv.Atoi

关于go - 如何使用 fmt.Sscan 将整数解析为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28604563/

相关文章:

go - 每次发生突变时都会有新对象?

sql-server - 无法使用 'sa' 连接到远程 SQLServer

mongodb - 从MongoDB获取两个地理位置之间的距离

Twitter oauth golang 得到错误 "code":32 ,"message" :"Could not authenticate you."

google-app-engine - 如何在 Go 中的 GAE-Datastore 上插入多值属性?

mysql - 使用go连接mysql数据库

Golang 从 stdin 读取,如何检测特殊键(输入,退格...等)

go - Golang 的 ... 语法真的只是可变参数吗?

go - 导入包的正确项目结构

图像 blob 到 base64