为了账号安全,请及时绑定邮箱和手机立即绑定

golang中的文件输入

golang中的文件输入

Go
翻翻过去那场雪 2021-06-10 17:21:58
我是 Go 的新手(就像在最后一天一样)并且正在玩一个处理来自 stdin 的数据的简单程序。我想要做的是,如果没有向标准输入提供数据,那么程序将输出一个帮助屏幕,然后退出。我遇到的问题是,当没有通过标准输入提供数据时,程序似乎无限期挂起。这是该程序和我的预期用途的简短示例:package mainimport (    "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.txtline1line2line3Running with no input:go run test.go我不提供输入的第二种情况是导致程序挂起的原因。通读文档,我不清楚如何编写程序以不无限期地等待输入,而是在 stdin 上不存在任何内容时中断。
查看完整描述

2 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

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


一种常见的方法是执行类似(简化)的操作:


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)

        }

}

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


这种方法可以很好地与 shell 脚本、通过管道链接命令等配合使用。


查看完整回答
反对 回复 2021-06-21
  • 2 回答
  • 0 关注
  • 311 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信