go中的os包功能分类(方便记忆)

75 阅读3分钟

Go语言的os包提供了与操作系统交互的功能。以下是os包的主要用法总结:

  1. 文件操作
    • Open(name string) (*File, error): 打开文件只读。
    • OpenFile(name string, flag int, perm FileMode):按照模式打开文件
    • Create(name string) (*File, error): 创建新文件或截断现有文件。
    • Remove(name string) error: 删除文件或空目录。
    • Rename(oldpath, newpath string) error: 重命名文件或目录。
    • Stat(name string) (FileInfo, error): 获取文件信息。

OpenFile()对应的flag有:

// 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.

OpenFile()中的参数 perm FileMode:对应的文件的权限设置。常用的是0644

权限模式的详细解释

权限模式0644由四个数字组成:

  • 前导的0表示这是一个八进制数。
  • 第一个数字6表示所有者的权限。
  • 第二个数字4表示组的权限。
  • 第三个数字4表示其他用户的权限。

每个数字代表以下权限:

  • 4(读权限 r):对应二进制的100。
  • 2(写权限 w):对应二进制的010。
  • 1(执行权限 x):对应二进制的001。

通过将这些权限组合,我们可以得到一个八进制数:

  • 6 = 4(读) + 2(写) = 110(二进制)。
  • 4 = 4(读) = 100(二进制)。

权限模式0644的具体含义

  • 所有者权限:6 = 4(读) + 2(写) = rw-(读写)。
  • 组权限:4 = 4(读) = r--(只读)。
  • 其他用户权限:4 = 4(读) = r--(只读)。

因此,权限模式0644表示:

  • 所有者可以读取和写入该文件,但不能执行。
  • 组成员可以读取该文件,但不能写入或执行。
  • 其他用户可以读取该文件,但不能写入或执行。

补充Stat()返回的一个FileInfo接口:

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() any           // underlying data source (can return nil)
}
  1. 目录操作

    • Mkdir(name string, perm FileMode) error: 创建目录。
    • MkdirAll(path string, perm FileMode) error: 递归创建目录。
    • RemoveAll(path string) error: 递归删除路径及其内容。
  2. 文件读写

    • (*File).Read(b []byte) (n int, err error): 读取文件。
    • (*File).Write(b []byte) (n int, err error): 写入文件。
    • (*File).Close() error: 关闭文件。
    • (*File).Seek(offset int64, whence int) (ret int64, err error): 设置文件读取位置。
  3. 环境变量

    • Getenv(key string) string: 获取环境变量。
    • Setenv(key, value string) error: 设置环境变量。
    • Unsetenv(key string) error: 删除环境变量。
    • Environ() []string: 获取所有环境变量。
  4. 进程操作

    • Exit(code int): 退出当前进程。
    • StartProcess(name string, argv []string, attr *ProcAttr) (*Process, error): 启动新进程。
    • FindProcess(pid int) (*Process, error): 查找进程。
  5. 错误处理

    • 常见错误变量:ErrNotExist, ErrExist, ErrPermission
  6. 标准流 Stdin, Stdout, Stderr: 标准输入、输出、错误流。使用例如:os.Stdin

os包通过这些函数和方法提供了文件系统操作、环境变量管理和进程控制等基本操作功能。