當嘗試附加到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 { /*[...]*/ }
根據文檔flags 參數中必須包含下列存取模式之一:O_RDONLY、O_WRONLY 或O_RDWR。這些請求分別以唯讀、唯寫或讀/寫模式開啟檔案。
預設情況下,Go 的 os.OpenFile 呼叫以唯讀模式開啟檔案。因此,有必要明確指定 O_WRONLY 以允許寫入日誌檔案。
以上是為什麼 `os.OpenFile` 函數在附加到 Go 的日誌檔案時會拋出「錯誤檔案描述子」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!