«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как определить, передается ли ввод по конвейеру в Go?

Как определить, передается ли ввод по конвейеру в Go?

Опубликовано 11 декабря 2024 г.
Просматривать:271

How to Determine if Input is Piped in Go?

Определение конвейерного ввода в 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