Go – Rename or Move File with os.Rename: Syntax, Use Cases & Tips (2025 Guide)
Introduction – Why Rename or Move Files in Go?
In Go, you can rename or move files and folders using the os.Rename() function. It’s a simple and effective way to handle file system operations like file uploads, log rotation, or organizing file structures dynamically.
In this guide, you’ll learn:
- How to rename files using
os.Rename - Move files and directories across locations
- Handle errors and platform-specific quirks
- Best practices for safe and atomic operations
Basic Example – Rename a File
package main
import (
"fmt"
"os"
)
func main() {
oldPath := "old.txt"
newPath := "new.txt"
err := os.Rename(oldPath, newPath)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("File renamed successfully.")
}
}
Output:
File renamed successfully.
os.Rename() renames the file from old.txt to new.txt.
Move a File to Another Directory
err := os.Rename("report.txt", "archive/report.txt")
if err != nil {
fmt.Println("Move failed:", err)
}
Works as a move operation too—renames path across folders.
Note: The target directory must exist, or the call fails.
Rename/Move a Folder
err := os.Rename("old_folder", "new_folder")
Renames folders as well. It’s just a path change—no file contents are touched.
Handle Rename Errors Gracefully
if _, err := os.Stat("old.txt"); os.IsNotExist(err) {
fmt.Println("File does not exist")
} else if err := os.Rename("old.txt", "new.txt"); err != nil {
fmt.Println("Rename failed:", err)
}
Always check file existence and handle common errors like permission denied.
Windows vs Unix Behavior
| Platform | Notes |
|---|---|
| Linux/macOS | Allows replacing the target if it exists |
| Windows | Fails if the destination already exists (use custom logic) |
Move Across File Systems (Advanced)
os.Rename() may fail if source and destination are on different devices.
In that case:
- Use
io.Copy()to copy the file. - Delete the source file.
Best Practices
| Tip | Why It Matters |
|---|---|
| Ensure destination path exists | Prevents “no such directory” error |
| Avoid overwriting unless needed | Protects data from accidental loss |
| Don’t rely on atomicity across FS | os.Rename not guaranteed across devices |
| Use logs for audit trails | Useful in file-processing systems |
Summary – Recap & Next Steps
Go makes renaming and moving files simple and cross-platform with os.Rename(). It’s ideal for use cases like log rotation, file uploads, and organizing backups.
Key Takeaways:
- Use
os.Rename(oldPath, newPath)to rename or move files - Moving and renaming is the same under the hood
- Works for both files and folders
- May fail across file systems or if the destination path is invalid
Next: Learn How to Copy Files, Check if File Exists, or Handle Temp Files in Go.
FAQs – Go Rename & Move File
What function is used to rename a file in Go?
Use os.Rename(oldPath, newPath).
Can I move a file across directories with os.Rename()?
Yes, as long as both paths are on the same file system.
What happens if the destination file already exists?
On Unix, it’s replaced. On Windows, the operation fails.
Can I rename a folder using the same function?
Yes. Folders can be renamed just like files.
How do I move a file across different file systems?
Use io.Copy() + os.Remove() to copy and delete manually.
Share Now :
