前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang os 系统包

golang os 系统包

作者头像
copy_left
发布2019-08-23 17:46:29
1.3K0
发布2019-08-23 17:46:29
举报
文章被收录于专栏:方球方球方球

环境变量

获取所有环境变量, 返回变量列表

func Environ() []string
    envs := os.Environ()
    for _, env := range envs {
        cache := strings.Split(env, "=")

        fmt.Printf(`
        
            key: %s
            value: %s
            
        `, cache[0], cache[1])
    }

获取指定环境变量

func Getenv(key string) string
    fmt.Println(os.Getenv("GOPATH"))

设置环境变量

func Setenv(key, value string) error
if err := os.Setenv("GOPATH", "./GO/bin"); err != nil{
    fmt.Println(err)
}else{
    fmt.Println("success")
}

清除所有环境变量

os.Clearenv()

文件模式

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

文件信息

type FileInfo interface {
    Name() string       // 文件的名字(不含扩展名)
    Size() int64        // 普通文件返回值表示其大小;其他文件的返回值含义各系统不同
    Mode() FileMode     // 文件的模式位
    ModTime() time.Time // 文件的修改时间
    IsDir() bool        // 等价于Mode().IsDir()
    Sys() interface{}   // 底层数据来源(可以返回nil)
}

获取文件信息对象, 符号链接将跳转

func Stat(name string) (fi FileInfo, err error)

    fi, _ := os.Stat("./cache.js")

    fmt.Println(fi.Size())

获取文件信息对象, 符号链接不跳转

根据错误,判断 文件或目录是否存在

if _, err := os.Open("./empty.js"); err != nil {
        // false 不存在   true 存在
        emptyErr := os.IsExist(err)
        fmt.Println(emptyErr, "\n", err)
    }

IsExist 反义方法

根据错误,判断是否为权限错误

    file, _ := os.Open("./cache.js")
    _, err := file.WriteString("// new info")

    if err != nil {
        fmt.Println(os.IsPermission(err))
    }

文件/目录操作

属性操作

获取当前工作目录

func Getwd() (dir string, err error)

    path, _ := os.Getwd()
    fmt.Println(path)

修改当前,工作目录

func Chdir(dir string) error
    os.Chdir("./../")
    
    path, _ := os.Getwd()
    fmt.Println(path)

修改文件的 FileMode

func Chmod(name string, mode FileMode) error

修改文件的 访问时间和修改时间

func Chtimes(name string, atime time.Time, mtime time.Time) error

    path := "./cache.js"
    
    
    os.Chtimes(path, time.Now(), time.Now())
    
    fi, _ := os.Stat(path)
    fmt.Println(fi.ModTime())
增删改查

创建目录

func Mkdir(name string, perm FileMode) error
if err :=   os.Mkdir("./static", os.ModeDir); err != nil{
    fmt.Println(err)
}else{
    fmt.Println("success")
}

递归创建目录

func MkdirAll(path string, perm FileMode) error
    os.MkdirAll("./static/imgs/icon", os.ModeDir)

移除文件或目录(单一文件)

func Remove(name string) error
if err := os.Remove("./static"); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println("success")
    }

递归删除文件或目录

func RemoveAll(path string) error
if err := os.RemoveAll("./static"); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println("success")
    }

文件重名或移动

func Rename(oldpath, newpath string) error
    // 重命名
    err := os.Rename("./test.js", "./file.js")

    // 移动
    os.Rename("./file.js", "./warp/file.js")

修改文件大小

func Truncate(name string, size int64) error
    path := "./cache.js"
    fi, _ := os.Stat(path)

    size := fi.Size()
    fmt.Println(size)

    // 截取长度
    size = int64(float64(size) * .5)

    os.Truncate(path, size)

    fi, _ = os.Stat(path)

    fmt.Println(fi.Size())
    
    // 注意: 长度小于原文件时,文件内容将被截取
    // 长度大于原文件时,超出部分将被无效字符填充

比较两个文件信息对象,是否指向同一文件

func SameFile(fi1, fi2 FileInfo) bool
    path := "./cache.js"
    fi_1, _ := os.Stat(path)
    fi_2, _ := os.Stat(path)

    fmt.Println(os.SameFile(fi_1, fi_2))

文件/目录对象

打开文件/目录

创建文件, 如果文件存在,清空原文件

func Create(name string) (file *File, err error)
    file, _ := os.Create("./new_file.js")
    fmt.Println(file.Name())

打开文件,获取文件对象, 以读取模式打开

func Open(name string) (file *File, err error)
    file, _ := os.Open("./new_file.js")
    fmt.Println(file.Name())

以指定模式,打开文件

func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
    file, _ := os.OpenFile("./new_file.js", os.O_RDONLY, os.ModeAppend)
    fmt.Println(file.Name())
文件对象属性操纵

获取文件路径

func (f *File) Name() string

获取文件信息对象

func (f *File) Stat() (fi FileInfo, err error)

将当前工作路径修改为文件对象目录, 文件对象必须为目录, 该接口不支持window

func (f *File) Chdir() error

修改文件模式

func (f *File) Chmod(mode FileMode) error

修改文件对象size

func (f *File) Truncate(size int64) error
文件对象读写操作

读取文件内容, 读入长度取决 容器切片长度

func (f *File) Read(b []byte) (n int, err error)
    bt := make([]byte, 100)
    file, _ := os.Open("./source.js")

    file.Read(bt)

    fmt.Println(string(bt))

从某位置,读取文件内容

func (f *File) ReadAt(b []byte, off int64) (n int, err error)
    bt := make([]byte, 100)
    file, _ := os.Open("./source.js")

    file.ReadAt(bt, 20)

    fmt.Println(string(bt))

写入内容

func (f *File) Write(b []byte) (n int, err error)
    file, _ := os.OpenFile("./source.js", os.O_RDWR, os.ModeAppend)

    defer file.Close()

    if n, err := file.Write([]byte("// new info")); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(n)
    }

写入字符

func (f *File) WriteString(s string) (ret int, err error)
    file, _ := os.OpenFile("./source.js", os.O_RDWR, os.ModeAppend)

    defer file.Close()

    if n, err := file.WriteString("// new info"); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(n)
    }

从指定位置,写入

func (f *File) WriteAt(b []byte, off int64) (n int, err error)
    file, _ := os.OpenFile("./source.js", os.O_RDWR, os.ModeAppend)

    fi, _ := file.Stat()
    size := fi.Size()

    defer file.Close()

    if n, err := file.WriteAt([]byte("\n// new info"), size); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(n)
    }

设置下次读写位置

func (f *File) Seek(offset int64, whence int) (ret int64, err error)

关闭文件

func (f *File) Close() error
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.08.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境变量
  • 文件模式
  • 文件信息
  • 文件/目录操作
    • 属性操作
      • 增删改查
      • 文件/目录对象
        • 打开文件/目录
          • 文件对象属性操纵
            • 文件对象读写操作
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档