Я видел множество примеров и руководств, которые показывают, как создать файл, и все они "обманывают", просто устанавливая биты разрешения файла. Я хотел бы узнать/узнать, как правильно создать экземпляр os.FileMode для предоставления писателю во время создания/обновления файла.
Грубым примером является следующее:
func FileWrite(path string, r io.Reader, uid, gid int, perms string) (int64, error){
w, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0664)
if err != nil {
if path == "" {
w = os.Stdout
} else {
return 0, err
}
}
defer w.Close()
size, err := io.Copy(w, r)
if err != nil {
return 0, err
}
return size, err
}
В базовой функции выше допустимы биты 0664, и хотя это может иметь смысл, иногда я предпочитаю иметь правильный способ правильной настройки файла. Как видно выше, общий пример будет заключаться в том, что UID/GID известен и уже представлен как значения int, а perms - восьмеричные цифры, которые ранее были собраны и вставлены в db в виде строки.