首页 >后端开发 >Golang >如何在 Golang 中检查 STDIN 上的可用输入?

如何在 Golang 中检查 STDIN 上的可用输入?

DDD
DDD原创
2024-12-18 20:06:11621浏览

How Can I Check for Available Input on STDIN in Golang?

在 Golang 中检查 STDIN 上的可用输入

在某些命令行场景中,了解 stdin 上是否存在输入对于定制行为至关重要。考虑以下示例:

package main

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

虽然此代码适用于管道输入,但当不存在输入时,它会在 ioutil.ReadAll(os.Stdin) 处停止。本文解决了这个问题,提供了一个解决方案来确定 stdin 数据的可用性。

解决方案:检查文件模式

解决方案在于检查标准输入流。当stdin是常规文件(例如终端)时,其模式包括os.ModeCharDevice,指示字符设备状态。相反,如果输入是通过管道传输的,则该模式缺少此标志。以下代码演示了这种方法:

package main

import (
    "fmt"
    "os"
)

func main() {
    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")
    }
}

通过此修改,您的程序可以区分管道和基于终端的 stdin 输入,从而允许进行适当的行为调整。

以上是如何在 Golang 中检查 STDIN 上的可用输入?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn