Go ルーチン内でログ ファイルに追加しようとすると、次のエラーが発生する場合があります:
write ./log.log: bad file descriptor
ターゲット ファイルが存在し、適切な権限があることを確認したにもかかわらず、問題は解決しません。ミューテックスを使用して問題を解決する最初の試みは失敗しました。
解決策は、O_WRONLY フラグを os.OpenFile 呼び出しに追加することです:
if f, err := os.OpenFile("./log.log", os.O_APPEND|os.O_WRONLY, os.ModeAppend); err != nil { /*[...]*/ }
Open に関する Linux ドキュメントによると、次のアクセス モードのいずれかをフラグに含める必要があります。引数: O_RDONLY、O_WRONLY、または O_RDWR。これらはそれぞれ、読み取り専用、書き込み専用、または読み取り/書き込みモードでファイルを開くことを要求します。
デフォルトでは、Go の os.OpenFile 呼び出しは読み取り専用モードでファイルを開きます。そのため、ログ ファイルへの書き込みを許可するには、O_WRONLY を明示的に指定する必要があります。
以上がGo でログ ファイルに追加するときに、「os.OpenFile」関数が「不正なファイル記述子」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。