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.
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
.perm
is 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 ifpath
is 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")
}
There are two functions for creating files:
-
func Create(name string) (file *File, err Error)
Create a file with
name
and 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
name
with read-only access, callingOpenFile
under the covers. -
func OpenFile(name string, flag int, perm uint32) (file *File, err Error)
Opens a file called
name
.flag
is open mode like read-only, read-write, etc.perm
are the file permissions.
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"))
}
}
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
off
tob
.
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])
}
}
Go uses the same function for removing files and directories:
-
func Remove(name string) Error
Remove a file or directory called
name
.( *** aname
ending with/
signifies that it's a directory*** )