os
os 包是 Go 语言标准库的一部分,主要用于与操作系统进行交互,提供了访问操作系统底层功能的功能。下面是关于 os 包的一些重要功能和用法:
- 文件和目录操作:
os.Create:创建文件。os.Open:打开文件。os.OpenFile:以指定模式打开文件。os.Remove:删除文件或目录。os.Rename:重命名文件或目录。os.Mkdir:创建目录。os.MkdirAll:递归创建目录。os.Chdir:改变工作目录。os.Getwd:获取当前工作目录。os.Stat:获取文件或目录的信息。
- 文件描述符:
os.Stdin、os.Stdout、os.Stderr:标准输入、标准输出和标准错误的文件描述符。os.File:表示文件的结构,包括文件描述符、文件名等信息。
- 环境变量:
os.Getenv:获取环境变量的值。os.Setenv:设置环境变量的值。os.Unsetenv:删除环境变量。
- 进程控制:
os.Args:命令行参数。os.Getpid:获取当前进程的 PID。os.Getppid:获取父进程的 PID。os.Exit:退出当前进程。
- 信号处理:
os.Signal:表示操作系统信号的类型。os.Notify:用于接收指定的操作系统信号。
- 用户和组信息:
os.User:表示用户的结构。os.LookupEnv:根据环境变量名查找环境变量值。os.Hostname:获取主机名。
- 权限和文件信息:
os.Chmod:改变文件或目录的权限。os.Chtimes:改变文件或目录的访问和修改时间。os.Symlink:创建符号链接。os.Readlink:读取符号链接目标路径。os.Lstat:获取符号链接信息,而不是目标文件信息。
- 文件路径操作:
os.PathSeparator:表示文件路径中的路径分隔符。os.Join:连接路径元素以创建有效的文件路径。os.Split:分割文件路径为目录和文件名。os.IsExist:判断错误是否表示文件已存在。os.IsNotExist:判断错误是否表示文件不存在。
- 执行外部命令:
os.Exec:执行外部命令并获取其输出。os.StartProcess:以指定的属性启动新进程。
- 文件锁:
os.FileLock:文件锁结构,用于文件的读写锁定。
- 平台相关功能:
os.Environ:获取当前进程的所有环境变量。os.Hostname:获取主机名。
io
io 包是 Go 语言标准库中的一个核心包,提供了对输入和输出操作的抽象和通用接口。这个包包含了许多接口和类型,用于处理文件、网络连接、内存缓冲、压缩、解压缩等 I/O 相关的操作。以下是一些 io 包的重要接口和类型:
-
Reader接口:Reader接口定义了读取数据的方法,允许实现该接口的类型从不同的数据源读取数据。Read(p []byte) (n int, err error):从数据源读取数据并将其存储到p中,返回读取的字节数和可能的错误。
标准库中的一些类型实现了
Reader接口,例如os.File、strings.Reader等。 -
Writer接口:Writer接口定义了写入数据的方法,允许实现该接口的类型将数据写入不同的目标。Write(p []byte) (n int, err error):将p中的数据写入目标,返回写入的字节数和可能的错误。
标准库中的一些类型实现了
Writer接口,例如os.File、bytes.Buffer等。 -
Closer接口:Closer接口定义了关闭资源的方法,通常用于释放资源,如文件句柄、网络连接等。Close() error:关闭资源并返回可能的错误。
例如,
os.File实现了Closer接口,可以用来关闭文件。 -
Seeker接口:Seeker接口定义了在数据源中定位的方法,通常用于随机访问文件或其他数据源。Seek(offset int64, whence int) (int64, error):根据whence指定的方式定位到offset处,返回新的偏移量和可能的错误。
例如,
os.File实现了Seeker接口,可以用来在文件中定位。 -
ReadWriter接口:ReadWriter接口组合了Reader和Writer接口,表示同时支持读和写操作的对象。 -
ReadCloser和WriteCloser接口:这些接口组合了
Reader或Writer接口和Closer接口,表示同时支持读或写和关闭的对象。 -
MultiReader和MultiWriter:这些类型实现了多个
Reader或Writer的复合操作,允许多个数据源进行串联。 -
io.Copy函数:io.Copy函数用于将数据从一个Reader复制到一个Writer中,通常用于文件复制、网络传输等操作。 -
io/ioutil包:io/ioutil包提供了一些便捷的函数,用于简化文件读写、临时文件创建等操作。例如,ioutil.ReadFile用于读取整个文件到内存中,ioutil.WriteFile用于将数据写入文件。 -
io.Pipe类型:io.Pipe类型用于在不同的 goroutine 之间创建一个管道,允许一个 goroutine 写入数据,另一个 goroutine 读取数据。 -
io.Reader和io.Writer的适配器:io包还提供了许多适配器类型,用于将其他类型(例如字符串、字节数组)转换为Reader或Writer接口,以便进行 I/O 操作