首页 > 其他分享 >标准库之os

标准库之os

时间:2024-03-14 16:13:43浏览次数:17  
标签:文件 获取 fmt 标准 Println os ID

目录

os介绍

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

1. 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())
}

2. 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权限位(用于通过&获取类型位)
)

3. 其他

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
}

标签:文件,获取,fmt,标准,Println,os,ID
From: https://www.cnblogs.com/Mcoming/p/18073083

相关文章

  • 标准库之exec
    目录一、exec介绍1.exec函数和Cmd的方法二、案例1.只执行命令,不获取结果2.执行命令并获取结果3.执行命令,区分stdout和stderr4.使用管道,多条命令组合5.设置程序级别的环境变量一、exec介绍有时候我们的go程序需要执行外部的命令,比如执行linuxshell命令,一个其他语言编......
  • 标准库之strings
    目录一、strings库介绍二、字符串比较-Compare1.介绍2.示例三、检测字符串是否包含子串-Contains1.介绍2.示例四、大小写转换1.介绍2.示例五、统计子字符串出现的次数1.介绍2.示例六、判断字符串的前后缀1.介绍2.示例七、分割和连接1.介绍2.示例八、索引1.介绍2.示......
  • 标准库之rand
    目录一、rand库介绍二、math/rand1.基本使用2.常用的方法3.生成定长的随机数三、crypto/rand一、rand库介绍在Go中,有两个包提供了rand,分别为math/rand和crypto/rand,对应两种应用场景math/rand包实现了伪随机数生成器。也就是生成整型和浮点型crypto/rand包实......
  • 标准库之path和filepath
    目录一、Path包1.常用函数2.示例二、filepath1.常用函数2.示例一、Path包实现的功能和python的os模块的os.path的方法类似注意:该包只对/路径有效,windows的\路径无效1.常用函数path包实现了对用斜杠进行分隔的路径进行操作的函数funcIsAbs(pathstring)bool//......
  • 标准库之context(很重要)
    目录标准库之context一、为什么需要context1.基本并发的示例2.全局变量方式的并发3.通道方式的并发4.官方版的方案二、Context初识1.Context接口2.两个顶级Context(1)Background()和TODO()(2)区别3.派生Context(With系列函数)(1)WithCancel(可取消context)i.context控制goroutin......
  • linux系统GHOST备份方案(运维工程师必备技能)
    linux系统GHOST备份方案Windows系统备份可以用ghost工具软件完成,Linux系统不能完全依赖于ghost工具,一则是ghost本身是有版权的软件,二则ghost只支持ext2、ext3文件系统的Linux分区,不支持reiserfs、xfs等比较高级的文件系统,ghost本身并不备份mbr,因此常造成恢复后的系统grub出错......
  • ros2中Qos的C++配置方法
    1.dds_debug.hpp#ifndefDDS_DEBUG__DDS_DEBUG_HPP_#defineDDS_DEBUG__DDS_DEBUG_HPP_#include<rclcpp/rclcpp.hpp>#include<rclcpp/qos.hpp>#include<rmw/types.h>#include<sensor_msgs/msg/imu.hpp>constrmw_qos_profile_tmy_cus......
  • HarmonyOS 鸿蒙 arkts 自定义组件插槽
    HarmonyOS鸿蒙arkts中自定义组件中要传入其他组件的时候就可以使用自定义组件插槽。Container组件添加child属性后,表示该组件具备了额外添加子组件的能力,接下来在需要添加子组件的地方使用child属性做占位即可。自定义组件@ComponentexportstructContainer{@Bu......
  • 服务平滑迁移:eureka迁移到nacos。无法注册双中心的问题解决
    迁移的文档:https://www.alibabacloud.com/help/zh/edas/developer-reference/smoothly-migrate-a-spring-cloud-cluster-that-contains-multiple-applications-to-edas其中遇到的问题未配置排除配置项时(exclude={RibbonEurekaAutoConfiguration.class}),ribbonServerList不是......
  • PostgreSQL从入门到精通教程 - 第46讲:poc-tpch测试
       PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。 第46讲:POC-TPCH测试  内容1:TPC-H介绍内容2:TPC-H......