如何有效地从 Go 中的 stdin 读取数字(或者为什么 fmt.Scanf 效率如此低下)

我开始参加 Go 编程比赛(只是为了学习语言),令我惊讶的是发现


var T int

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

慢得难以想象。有多慢?到读10 ^ 5的整数它带我2.5秒(与Python做它在0.8秒)。


那么为什么它这么慢,我应该如何正确阅读int,uint64以及float64?


当年话下
浏览 175回答 1
1回答

RISEBY

如果你只有整数作为输入,这应该更快(虽然没有测试)package mainimport (    "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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go