01
介绍
Golang 语言的标准库 os 包提供独立于平台的操作系统相关功能的接口。其设计类似于 Unix,尽管错误处理类似于 Go,调用失败则返回 error 类型的错误,而不是错误编号的值。通常,error 类型的错误中会提供更多信息。
例如 Open 或 Stat,如果返回 error,那么错误将在打印时包含失败的文件名,并且错误类型为 *PathError
,可以通过 *PathError
的方法获取更多信息。
type PathError struct {
Op string
Path string
Err error
}
os 接口旨在在所有操作系统上保持统一。不通用的功能在系统特定的 syscall 包中实现。
此外,os 包还有三个子包,分别是:
但是,本文只介绍 os 包关于目录和文件的操作。
02
函数
os 包提供了很多函数,限于篇幅,我们不会一一介绍,而是主要介绍项目开发中比较常用的关于目录和文件的相关函数。
目录
文件
0666
。O_CREATE
创建文件,多个 flag 使用 |
分隔,例如 O_CREATE|O_APPEND
。03
文件
文件信息 FileInfo interface
type FileInfo interface {
Name() string // base name of the file
Size() int64 // length in bytes for regular files; system-dependent for others
Mode() FileMode // file mode bits
ModTime() time.Time // modification time
IsDir() bool // abbreviation for Mode().IsDir()
Sys() interface{} // underlying data source (can return nil)
}
FileInfo 接口封装了文件信息相关的方法,可以通过函数 Stat
和 Lstat
获取 FileInfo。
fi, err := os.Stat("file1.txt")
if err != nil {
fmt.Println(err)
return
}
文件权限 FileMode
type FileMode uint32
FileMode 可以用于获取文件权限。
获取文件权限的示例代码:
fi, err := f.Stat()
if err != nil {
fmt.Println(err)
return
}
fileMode := fi.Mode().String()
fmt.Println(fileMode)
文件 File
type File struct {
// contains filtered or unexported fields
}
File 表示打开的文件描述符,它提供了一些操作文件的方法。
关于文件的操作,主要分为打开、关闭和读写,关于打开文件的三种方式,已在 Part 02 函数部分介绍,关闭文件是调用函数 Close,为了防止忘记关闭文件,通常和 defer 搭配使用。
下面主要介绍读写文件。
写文件
读文件
b := make([]byte, 5)
n, err := f.Read(b)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(b)
fmt.Println(string(b))
fmt.Println(n)
b := make([]byte, 5)
n, err := f.ReadAt(b, 10)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(b)
fmt.Println(n)
fmt.Println(string(b))
04
总结
本文主要介绍的是通过 Golang 语言标准库 os 包如何操作目录和文件,此外,os 包还有其他用法,比如操作环境变量。建议感兴趣的读者阅读 os 包的官方文档,了解更多关于 os 包的用法。
推荐阅读:
Golang 语言三方库 lumberjack 日志切割组件怎么使用?
Go team 开源项目 Go Cloud 使用的依赖注入工具 Wire 怎么使用?
Golang 语言的值验证库 Validator 怎么使用?
Golang语言使用 jwt-go 库生成和解析 token
参考资料:
https://golang.org/pkg/os/