登录
首页 >  Golang >  Go问答

检查 Golang 中的 STDIN 是否有需要阅读的内容

来源:Golang技术栈

时间:2023-03-22 18:46:26 455浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《检查 Golang 中的 STDIN 是否有需要阅读的内容》,就坚持看下去吧!文中内容包含golang等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

如果将某些字符串通过管道传输到其 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

如果test.go在 STDIN 上没有任何内容的情况下调用,则事情会停留在...

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

……等着EOF

我需要做什么才能让这一切顺利进行?

提前致谢!

正确答案

我通过使用 os.ModeCharDevice 解决了这个问题:

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")
}

好了,本文到此结束,带大家了解了《检查 Golang 中的 STDIN 是否有需要阅读的内容》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>