在 Go 中将数字扫描成切片
当从 Go 中的标准输入读取多个数字时,可以为各个变量赋值:
numbers := make([]int, 2) fmt.Fscan(os.Stdin, &numbers[0], &numbers[1])
但是,您可能希望简化过程并直接读入切片。 fmt 包不支持扫描切片,但以下实用函数可以提供帮助:
func packAddrs(n []int) []interface{} { p := make([]interface{}, len(n)) for i := range n { p[i] = &n[i] } return p }
此函数为输入切片中的每个元素创建一个地址切片。使用此函数,您可以像这样扫描切片:
numbers := make([]int, 2) n, err := fmt.Fscan(os.Stdin, packAddrs(numbers)...) fmt.Println(numbers, n, err)
使用 fmt.Sscan() 进行测试:
numbers := make([]int, 5) n, err := fmt.Sscan("1 3 5 7 9", packAddrs(numbers)...) fmt.Println(numbers, n, err)
输出:
[1 3 5 7 9] 5 <nil>
以上是Go中如何高效地将多个数字扫描到一个Slice中?的详细内容。更多信息请关注PHP中文网其他相关文章!