gpt4 book ai didi

go - golang中的文件输入

转载 作者:IT王子 更新时间:2023-10-29 01:34:09 26 4
gpt4 key购买 nike

我是 Go 的新手(就在前一天),我正在玩一个简单的程序来处理来自 stdin 的数据。我想做的是,如果没有向标准输入提供数据,程序将输出一个帮助屏幕,然后退出。我遇到的问题是,当没有通过标准输入提供数据时,程序似乎无限期挂起。这是该程序的一个简短示例和我的预期用途:

package main

import (
"fmt"
"bufio"
"os"
)


func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
str := scanner.Text()
fmt.Println(str)
}
}


Running with input:
go run test.go < lines.txt
line1
line2
line3


Running with no input:
go run test.go

我不提供输入的第二种情况是导致程序挂起的原因。通读文档后,我不清楚如何编写程序以不无限期地等待输入,而是在标准输入上没有任何内容时中断。

最佳答案

程序的行为与代码所说的完全一样。代码说要从标准输入读取。可以通过重定向(如您所示)提供对标准输入的输入。或者通过管道。或 .... 或由用户在键盘上键入。如果在最后一种情况下程序会在人类输入内容之前退出,那将是非常令人惊讶的。

一种常见的方法是做类似(简化)的事情:

var in *os.File
var err error

switch name := flag.Arg(0); {
case name == "":
in = os.Stdin
default:
if in, err = os.Open(name); err != nil {
log.Fatal(err)
}
}

即。允许处理作为命令行参数给出的命名文件 - 但当没有为程序提供文件名参数时,回退/默认读取标准输入。

这种方法非常适合 shell 脚本、通过管道链接命令等。

关于go - golang中的文件输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18002834/

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