Godoc os 文档
Create 创建文件 如果文件存在则清空其内容, 不存在则以 0666
的权限创建:
1 func Create (name string ) (*File, error )
Remove 删除文件或空目录 1 func Remove (name string ) error
RemoveAll 递归删除目录及其下内容 1 func RemoveAll (path string ) error
Rename 重命名文件 1 func Rename (oldpath, newpath string ) error
OpenFile 以特定 flag 打开文件 1 func OpenFile (name string , flag int , perm FileMode) (*File, error )
如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package mainimport ( "log" "os" )func main () { f, err := os.OpenFile("notes.txt" , os.O_RDWR|os.O_CREATE, 0644 ) if err != nil { log.Fatal(err) } if err := f.Close(); err != nil { log.Fatal(err) } }
可用的 flag 有:
1 2 3 4 5 6 7 8 9 10 11 12 const ( O_RDONLY int = syscall.O_RDONLY O_WRONLY int = syscall.O_WRONLY O_RDWR int = syscall.O_RDWR O_APPEND int = syscall.O_APPEND O_CREATE int = syscall.O_CREAT O_EXCL int = syscall.O_EXCL O_SYNC int = syscall.O_SYNC O_TRUNC int = syscall.O_TRUNC )
ReadFile 直接读取文件内容并以 []byte 形式返回 1 func ReadFile (name string ) ([]byte , error )
WriteFile 以 []byte 形式向文件写入 如果文件不存在则创建:
1 func WriteFile (name string , data []byte , perm FileMode) error
如:
1 2 3 4 5 6 7 8 9 10 11 12 13 package mainimport ( "log" "os" )func main () { err := os.WriteFile("testdata/hello" , []byte ("Hello, Gophers!" ), 0666 ) if err != nil { log.Fatal(err) } }
Open 获取文件指针 1 func Open (name string ) (*File, error )
如:
1 2 3 4 file, err := os.Open("file.go" ) if err != nil { log.Fatal(err) }
Read 以 []byte 形式读取文件 1 func (f *File) Read(b []byte ) (n int , err error )
Open
函数会返回一个文件指针, 而 Read
函数可以将文件内容保存到一个 []byte
变量中:
1 2 3 4 5 6 7 8 9 10 11 file, err := os.Open("file.go" ) if err != nil { log.Fatal(err) } data := make ([]byte , 100 ) count, err := file.Read(data)if err != nil { log.Fatal(err) } fmt.Printf("read %d bytes: %q\n" , count, data[:count])
Write 向文件写入 []byte 1 func (f *File) Write(b []byte ) (n int , err error )
WriteAt 从指定 offset 写入 []byte 1 func (f *File) WriteAt(b []byte , off int64 ) (n int , err error )
WriteString 向文件写入 string 1 func (f *File) WriteString(s string ) (n int , err error )
Getwd 获取当前目录 1 func Getwd () (dir string , err error )
Chdir 变换工作目录 用 func Chdir(dir string) error
.
Chmod 修改文件权限 用 func Chmod(name string, mode FileMode) error
FileMode
类型的本质是 uint32
.
示例:
1 2 3 4 5 6 7 8 9 10 11 12 package mainimport ( "log" "os" )func main () { if err := os.Chmod("some-filename" , 0644 ); err != nil { log.Fatal(err) } }
Chown 修改文件所属 用:
1 func Chown (name string , uid, gid int ) error
uid
或 gid
为 -1
表示不改变.
Chtimes 修改访问时间和修改时间 用:
1 func Chtimes (name string , atime time.Time, mtime time.Time) error
Clearenv 清除所有环境变量
CreateTemp 创建临时文件 用 func CreateTemp(dir, pattern string) (*File, error)
.
创建文件目录由 dir
提供, 文件名为 pattern
加上随机字符串, 如果 pattern
包含 *
, 则随机字符串替换掉 *
.
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package mainimport ( "log" "os" )func main () { f, err := os.CreateTemp("" , "example" ) if err != nil { log.Fatal(err) } defer os.Remove(f.Name()) if _, err := f.Write([]byte ("content" )); err != nil { log.Fatal(err) } if err := f.Close(); err != nil { log.Fatal(err) } }
Expand 模拟字符串插值 利用:
1 func Expand (s string , mapping func (string ) string ) string
如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import ( "fmt" "os" )func main () { mapper := func (placeholderName string ) string { switch placeholderName { case "DAY_PART" : return "morning" case "NAME" : return "Gopher" } return "" } fmt.Println(os.Expand("Good ${DAY_PART}, $NAME!" , mapper)) }
Setenv 设置环境变量 1 func Setenv (key, value string ) error
Getenv 获取环境变量 1 func Getenv (key string ) string
ExpandEnv 在字符串中展开环境变量 1 func ExpandEnv (s string ) string
如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 package mainimport ( "fmt" "os" )func main () { os.Setenv("NAME" , "gopher" ) os.Setenv("BURROW" , "/usr/gopher" ) fmt.Println(os.ExpandEnv("$NAME lives in ${BURROW}." )) }
Link 设置硬链接 1 func Link (oldname, newname string ) error
Symlink 创建软链接 1 func Symlink (oldname, newname string ) error
Mkdir 创建单个目录 1 func Mkdir (name string , perm FileMode) error
Not
MkdirAll 递归创建目录 1 func MkdirAll (path string , perm FileMode) error
MkdirTemp 创建临时目录 1 func MkdirTemp (dir, pattern string ) (string , error )
ReadDir 获取一个目录下所有文件名 1 func ReadDir (name string ) ([]DirEntry, error )
如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package mainimport ( "fmt" "log" "os" )func main () { files, err := os.ReadDir("." ) if err != nil { log.Fatal(err) } for _, file := range files { fmt.Println(file.Name()) } }
Close 关闭文件指针 1 func (f *File) Close() error
Name 获取文件指针指向的文件名 1 func (f *File) Name() string
Stat 获取文件的 FileInfo 1 func (f *File) Stat() (FileInfo, error )
或:
1 func Stat (name string ) (FileInfo, error )
Truncate 截断文件 1 func (f *File) Truncate(size int64 ) error