我需要一个命令行实用程序,如果某个字符串通过管道传输到它的STDIN中,它的行为就会有所不同.下面是一些简单的例子:

package main // file test.go

import (
    "fmt"
    "io/ioutil"
    "os"
)

func main() {
    bytes, _ := ioutil.ReadAll(os.Stdin)

    if len(bytes) > 0 {
        fmt.Println("Something on STDIN: " + string(bytes))
    } else {
        fmt.Println("Nothing on STDIN")
    }
}

如果您这样称呼它,这很好用:

echo foo | go run test.go

如果在STDIN上没有任何信息的情况下呼叫test.go,那么它就会停滞在.

bytes, _ := ioutil.ReadAll(os.Stdin)

...等待EOF分钟.

我要怎么做才能让这一切继续下go ?

提前谢谢!

推荐答案

我用操作系统解决了这个问题.调制解调器设备:

stat, _ := os.Stdin.Stat()
if (stat.Mode() & os.ModeCharDevice) == 0 {
    fmt.Println("data is being piped to stdin")
} else {
    fmt.Println("stdin is from a terminal")
}

Go相关问答推荐

如何在go中传递C函数指针

T的Golang通用切片,其中 *T实现接口

如何修复Go中调用GetRawInputDeviceInfA Windows API函数时的错误?

由于索引器压缩比限制,扫描包含golang包的图像时,伪影XRAY失败

如何描述OpenAPI规范中围棋的数据类型.JSON?

困扰围棋官方巡回赛的S建议所有方法都使用同一类型的接收器

CURL和Postman HTTP POST工作,但Golang请求失败,状态为400

如何在Golang中覆盖404

在 go 中,将接收器 struct 从值更改为指针是否向后兼容?

使用Dockertest进行Golang SQL单元测试的基本设置

GORM中是否可能自动迁移具有循环关系的表?

这是实现超时的常见方法,为什么 time.After 不起作用

如何将 base64 编码的公钥转换为 crypto.PublicKey 或 ecdsa.PublicKey

Go 切片容量增长率

获取不带类型参数的泛型 struct 的类型名称

有没有什么方法可以在不使用 if/else 的情况下在 Golang 中处理 nil 指针?

在 Gorm 的 AfterFind() 钩子中获取智能 Select struct 的值

Golang invopop jsonschema 使用 if/then/else

手动将 OpenTelemetry 上下文从 golang 提取到字符串中?

Go Flag 用法 描述 包含 Word 值