flag
указывает флаги, используемые системным вызовом для открытия файла, в то время как perm
устанавливает режим файла для файла. Режим файла включает в себя права доступа и тип файла, например. символическая ссылка, каталог и т.д ...
os.O_APPEND
сообщает базовой ОС, что все вызовы записи, которые вы делаете для этого обработчика файла, всегда должны добавляться к файлу, поэтому вам не нужно устанавливать смещение для записи в правильной части файла.
ModeAppend
устанавливает режим файла для добавления. Это означает, что этот файл может быть изменен только путем добавления к нему, а не путем перезаписи содержимого файла. Специфика этого зависит от используемой ОС и файловой системы. Я считаю, что Plan 9 реализует его, игнорируя смещение при любом вызове записи в файл и всегда добавляя к нему, в то время как в Linux это означает, что файл может быть открыт только для записи в режиме добавления. Я думаю, что на большинстве дистрибутивов Linux вам нужно быть пользователем root, чтобы установить режим файла для добавления.
В 99,99% случаев вы просто хотите использовать perm
для установки прав доступа к файлу rwx
. В вашем случае, если вы хотите открыть файл и добавить к нему, вы должны использовать:
// os.O_WRONLY tells the computer you are only going to writo to the file, not read
// os.O_CREATE tells the computer to create the file if it doesn't exist
// os.O_APPEND tells the computer to append to the end of the file instead of overwritting or truncating it
f, err := os.OpenFile("access.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
Возможно, вы только проигнорировали ошибку возврата на os.OpenFile
, чтобы поместить пример в оперативный режим, но вы должны привыкнуть всегда проверять наличие ошибок. Вы не представляете, сколько пользователей столкнулись с проблемами при запуске с go, потому что они игнорируют ошибки. Иногда это что-то глупое и легко исправить, как опечатка, но если вы игнорируете ошибку, вы не знаете, в чем проблема.
Подробнее о режиме добавления файла вы можете прочитать здесь .