7.5 Files
Files are must-have objects on every single computer device. It won't come as any surprise to you that web applications also make heavy use of them. In this section, we're going to learn how to operate on files in Go.
Directories
In Go, most of the file operation functions are located in the os package. Here are some directory functions:
func Mkdir(name string, perm FileMode) error
Create a directory with
name.permis the directory permissions, i.e 0777.func MkdirAll(path string, perm FileMode) error
Create multiple directories according to
path, likeastaxie/test1/test2.func Remove(name string) error
Removes directory with
name. Returns error if it's not a directory or not empty.func RemoveAll(path string) error
Removes multiple directories according to
path. Directories will not be deleted ifpathis a single path.
Code sample:
package main
import (
"fmt"
"os"
)
func main() {
os.Mkdir("astaxie", 0777)
os.MkdirAll("astaxie/test1/test2", 0777)
err := os.Remove("astaxie")
if err != nil {
fmt.Println(err)
}
os.RemoveAll("astaxie")
}
Files
Create and open files
There are two functions for creating files:
func Create(name string) (file *File, err Error)
Create a file with
nameand return a read-writable file object with permission 0666.func NewFile(fd uintptr, name string) *File
Create a file and return a file object.
There are also two functions to open files:
func Open(name string) (file *File, err Error)
Opens a file called
namewith read-only access, callingOpenFileunder the covers.func OpenFile(name string, flag int, perm uint32) (file *File, err Error)
Opens a file called
name.flagis open mode like read-only, read-write, etc.permare the file permissions.
Write files
Functions for writing files:
func (file *File) Write(b []byte) (n int, err Error)
Write byte type content to a file.
func (file *File) WriteAt(b []byte, off int64) (n int, err Error)
Write byte type content to a specific position of a file.
func (file *File) WriteString(s string) (ret int, err Error)
Write a string to a file.
Code sample:
package main
import (
"fmt"
"os"
)
func main() {
userFile := "astaxie.txt"
fout, err := os.Create(userFile)
if err != nil {
fmt.Println(userFile, err)
return
}
defer fout.Close()
for i := 0; i < 10; i++ {
fout.WriteString("Just a test!\r\n")
fout.Write([]byte("Just a test!\r\n"))
}
}
Read files
Functions for reading files:
func (file *File) Read(b []byte) (n int, err Error)
Read data to
b.func (file *File) ReadAt(b []byte, off int64) (n int, err Error)
Read data from position
offtob.
Code sample:
package main
import (
"fmt"
"os"
)
func main() {
userFile := "asatxie.txt"
fl, err := os.Open(userFile)
if err != nil {
fmt.Println(userFile, err)
return
}
defer fl.Close()
buf := make([]byte, 1024)
for {
n, _ := fl.Read(buf)
if 0 == n {
break
}
os.Stdout.Write(buf[:n])
}
}
Delete files
Go uses the same function for removing files and directories:
func Remove(name string) Error
Remove a file or directory called
name.( anameending with/signifies that it's a directory )