package main import ( "os" "path/filepath" ) // writeFileAtomic writes data to path via a temp file + rename in the // same directory, so readers never observe a partially written file // and a crash mid-write cannot corrupt the target. func writeFileAtomic(path string, data []byte, perm os.FileMode) error { dir := filepath.Dir(path) if err := os.MkdirAll(dir, 0o755); err != nil { return err } tmp, err := os.CreateTemp(dir, filepath.Base(path)+".tmp-*") if err != nil { return err } tmpName := tmp.Name() defer os.Remove(tmpName) // no-op after successful rename if err := tmp.Chmod(perm); err != nil { tmp.Close() return err } if _, err := tmp.Write(data); err != nil { tmp.Close() return err } if err := tmp.Close(); err != nil { return err } return os.Rename(tmpName, path) }