STDIN의 입력 여부에 따라 명령줄 도구가 다르게 동작하도록 하려고 한다고 가정해 보겠습니다. 그러나 ioutil.ReadAll(os.Stdin)을 직접 사용하면 예상치 못한 동작이 발생할 수 있습니다.
특히 STDIN 입력 없이 도구를 호출하면 프로그램이 입력을 무기한 대기하여 진행이 불가능하게 됩니다. 추가.
이 문제를 해결하려면 os.Stdin.Stat()를 활용하여 STDIN 파일 설명자는 문자 장치입니다. 다음 코드 조각은 이를 달성하는 방법을 보여줍니다.
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 파일에 대해 ModeCharDevice 플래그가 지워지면 데이터가 STDIN으로 파이프되고 있음을 나타냅니다. 그렇지 않으면 STDIN이 터미널에 연결되어 있음을 나타냅니다. 이 플래그를 확인하면 프로그램을 차단하지 않고도 STDIN에서 읽을 내용이 있는지 확인할 수 있습니다.
위 내용은 Go에서 차단하지 않고 STDIN에서 읽을 수 있는 콘텐츠를 어떻게 감지할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!