Определение конвейерного ввода в Go
Понимание того, передается ли команда по конвейеру, имеет решающее значение в приложениях Go, особенно при обработке данных из различных источников. В этой статье рассматривается, как определить, передается команда по конвейеру или нет, что позволяет разработчикам соответствующим образом адаптировать свой код.
Решение
Go предоставляет os.Stdin.Stat( ) функция для получения информации о файле, связанной со стандартным вводом. Эта информация включает режим файла, который указывает, поступает ли ввод с терминала или канала. Следующий фрагмент кода демонстрирует, как использовать os.Stdin.Stat() для этой цели:
package main
import (
"fmt"
"os"
)
func main() {
fi, _ := os.Stdin.Stat()
if (fi.Mode() & os.ModeCharDevice) == 0 {
fmt.Println("data is from pipe")
} else {
fmt.Println("data is from terminal")
}
}
Когда команда передается по конвейеру, fi.Mode() и os.ModeCharDevice оцениваются как 0, что указывает на то, что ввод осуществляется не с символьного устройства (например, терминала). И наоборот, ненулевое значение означает, что ввод поступает от символьного устройства.
Этот подход обеспечивает надежный способ различать передаваемые по конвейеру и неперенаправленные входные данные, позволяя разработчикам соответствующим образом адаптировать поведение своих приложений.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3