Go-语言-os-库

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 main

import (
"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 (
// Exactly one of O_RDONLY, O_WRONLY, or O_RDWR must be specified.
O_RDONLY int = syscall.O_RDONLY // open the file read-only.
O_WRONLY int = syscall.O_WRONLY // open the file write-only.
O_RDWR int = syscall.O_RDWR // open the file read-write.
// The remaining values may be or'ed in to control behavior.
O_APPEND int = syscall.O_APPEND // append data to the file when writing.
O_CREATE int = syscall.O_CREAT // create a new file if none exists.
O_EXCL int = syscall.O_EXCL // used with O_CREATE, file must not exist.
O_SYNC int = syscall.O_SYNC // open for synchronous I/O.
O_TRUNC int = syscall.O_TRUNC // truncate regular writable file when opened.
)

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 main

import (
"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") // For read access.
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") // For read access.
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 main

import (
"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

uidgid-1 表示不改变.

Chtimes 修改访问时间和修改时间

用:

1
func Chtimes(name string, atime time.Time, mtime time.Time) error

Clearenv 清除所有环境变量

1
func 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 main

import (
"log"
"os"
)

func main() {
f, err := os.CreateTemp("", "example")
if err != nil {
log.Fatal(err)
}
defer os.Remove(f.Name()) // clean up

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 main

import (
"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 main

import (
"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

Go-语言-os-库
http://example.com/2024/02/11/Go-语言-os-库/
作者
Jie
发布于
2024年2月11日
许可协议