标准库之os

1|0os介绍

  • os 包提供了不依赖平台的操作系统函数接口。错误处理设计为go 风格,失败的调用会返回错误值而非错误码。通常错误值里包含更多信息

1|11. os基础操作

// 获取文件信息,可以用来判断文件或目录是否存在,获取文件大小 os.Stat() func Stat(name string) (FileInfo, error) // Stat返回描述文件f的FileInfo类型值。如果出错,错误底层类型是*PathError // 返回一个布尔值说明该错误是否表示一个文件或目录不存在 os.IsNotExist() golang判断文件或文件夹是否存在的方法为使用os.Stat()函数返回的错误值进行判断: 如果返回的错误为nil,说明文件或文件夹存在 如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在 如果返回的错误为其它类型,则不确定是否在存在 //获取主机名 os.Hostname() //获取当前目录 os.Getwd() //获取用户ID os.Getuid() //获取有效用户ID os.Geteuid() //获取组ID os.Getgid() //获取有效组ID os.Getegid() //获取进程ID os.Getpid() //获取父进程ID os.Getppid() //获取环境变量的值 os.Getenv("GOPATH") //设置环境变量的值 os.Setenv("NAME", "lqz") //清除所有环境变量(慎用) os.Clearenv() //改变当前工作目录 os.Chdir("/Users/liuqingzheng") package main import ( "fmt" "os" ) func main() { //获取主机名 fmt.Println(os.Hostname()) //获取当前目录 fmt.Println(os.Getwd()) //获取用户ID fmt.Println(os.Getuid()) //获取有效用户ID fmt.Println(os.Geteuid()) //获取组ID fmt.Println(os.Getgid()) //获取有效组ID fmt.Println(os.Getegid()) //获取进程ID fmt.Println(os.Getpid()) //获取父进程ID fmt.Println(os.Getppid()) //获取环境变量的值 fmt.Println(os.Getenv("GOPATH")) //设置环境变量的值 os.Setenv("NAME", "lqz") //清除所有环境变量(慎用) //os.Clearenv() //改变当前工作目录 os.Chdir("/Users/liuqingzheng") fmt.Println(os.Getwd()) }

1|22. os文件及目录相关

// 获取文件大小 func getFileSize(filename string) (int64, error) { fileInfo, err := os.Stat(filename) if err != nil { return 0, err } return fileInfo.Size(), nil } // 判断文件或目录是否存在 func PathExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return false, err } func main() { //创建目录 os.Mkdir("abc", os.ModePerm) // 0777 //创建多级目录 os.MkdirAll("xxxx/x", os.ModePerm) //删除文件或目录 os.Remove("xxx/x") //删除指定目录下所有文件 os.RemoveAll("xxxxx") //重命名文件 os.Rename("./test1.txt", "./twst1_new.txt") // 获取文件信息-->FileInfo接口类型,有很多方法,如文件大小,是否是文件夹等等 info,_:=os.Stat("./lqz") fmt.Println(info.Size()) //创建文件 f1, _ := os.Create("./test.txt") defer f1.Close() //修改文件权限 os.Chmod("./test.txt", 0777) ////修改文件所有者 os.Chown("./test.txt", 0, 0) //修改文件的访问时间和修改时间 os.Chtimes("./test.txt", time.Now().Add(time.Hour), time.Now().Add(time.Hour)) //打开文件 //func OpenFile(name string, flag int, perm FileMode) (file *File, err error) //以读写方式打开文件,如果不存在,则创建 file, err := os.OpenFile("./test2.txt", os.O_RDWR|os.O_CREATE, 0766) } //*********flag 取值********* 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_CREATE配合使用,文件必须不存在 O_SYNC int = syscall.O_SYNC // 打开文件用于同步I/O O_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件 ) //*********fFileMode取值*********f const ( // 单字符是被String方法用于格式化的属性缩写。 ModeDir FileMode = 1 << (32 - 1 - iota) // d: 目录 ModeAppend // a: 只能写入,且只能写入到末尾 ModeExclusive // l: 用于执行 ModeTemporary // T: 临时文件(非备份文件) ModeSymlink // L: 符号链接(不是快捷方式文件) ModeDevice // D: 设备 ModeNamedPipe // p: 命名管道(FIFO) ModeSocket // S: Unix域socket ModeSetuid // u: 表示文件具有其创建者用户id权限 ModeSetgid // g: 表示文件具有其创建者组id的权限 ModeCharDevice // c: 字符设备,需已设置ModeDevice ModeSticky // t: 只有root/创建者能删除/移动文件 // 覆盖所有类型位(用于通过&获取类型位),对普通文件,所有这些位都不应被设置 ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice ModePerm FileMode = 0777 // 覆盖所有Unix权限位(用于通过&获取类型位) )

1|33. 其他

func main() { // Environ返回表示环境变量的格式为”key=value”的字符串的切片拷贝 fmt.Println(os.Environ()) // Exit让当前程序以给出的状态码code退出。一般来说,状态码0表示成功,非0表示出错。程序会立刻终止,defer的函数不会被执行 os.Exit(0) //0为正常退出,其他数值(1-127)为不正常 2表示用法不当(Incorrect Usage) 127表示命令没有找到(Command Not Found) 126表示不是可执行的(Not an executable) // 返回一个用于保管临时文件的默认目录 fmt.Println(os.TempDir()) //Args保管了命令行参数,第一个是程序名 fmt.Println(os.Args) // 执行 go run xx.go lqz }

__EOF__

本文作者BigSun丶
本文链接https://www.cnblogs.com/Mcoming/p/18073083.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   BigSun丶  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示