gpt4 book ai didi

go - 我怎样才能有效地从 Go 中的标准输入读取数字(或者为什么 fmt.Scanf 如此低效)

转载 作者:IT王子 更新时间:2023-10-29 01:27:13 25 4
gpt4 key购买 nike

我开始用 go 做编程竞赛(只是为了学习这门语言),令我惊讶的是

var T int
fmt.Scanf("%d", &T)

慢得难以想象。有多慢?至read 10^5 integers我用了 2.5 秒(相比之下,python 在 0.8 秒内完成)。

那么为什么这么慢,我应该如何正确读取 intuint64float64

最佳答案

如果你只有整数作为输入,这应该会更快(虽然没有测试)

package main

import (
"io/ioutil"
"log"
"os"
"strconv"
)

func read() (int64, error) {
b, err := ioutil.ReadAll(os.Stdin)
if err != nil {
return 0, err
}

// use strconv.ParseUint and strconv.ParseFloat in a similar way
return strconv.ParseInt(string(b[:len(b)-1]), 10, 0)
}

func main() {
i, err := read()
if err != nil {
log.Fatal(err)
}

println(i)
}

这样运行

echo 123 | go run main.go

对于交互式输入,您可能需要使用 bufio.NewReader,请参阅 How to read input from console line?

关于go - 我怎样才能有效地从 Go 中的标准输入读取数字(或者为什么 fmt.Scanf 如此低效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29983559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com