golang之os包


os,系统包。

一、环境变量

1.获取所有环境变量, 返回变量列表:os.Environ()

   envs := os.Environ()
   for _, env := range envs {
      cache := strings.Split(env, "=")
      fmt.Println(cache)  //[USER root]、[HOSTNAME localhost.localdomain]
   }

 

2.获取指定环境变量:os.Getenv()

fmt.Println(os.Getenv("GOPATH"))

3.设置环境变量:os.Setenv

if err := os.Setenv("GOPATH", "./GO/bin"); err != nil {
        fmt.Println(err)
    } 

4.获取主机名称

fmt.Println(os.Hostname())

二、退出系统

os.Exit(code int)

三、文件内容操作

注意:如果新建文件、打开文件等文件操作,文件名称没有带路径,则需要线进入指定目录

  // 进入桌面目录
  os.Chdir("/Users/xujie/Desktop")

 

1.新建文件:os.Create(文件名称)

 file,error := os.Create("file.txt")
 if error != nil{
   fmt.Println(error)
 }

 

2.打开文件:文件对象=os.Open(文件名称,打开模式,权限)

 file,error:= os.Open("file.txt")
 if error != nil {
   fmt.Println(error)
 }

第二个参数

O_RDONLY 打开只读文件

O_WRONLY 打开只写文件

O_RDWR 打开既可以读取又可以写入文件

O_APPEND 写入文件时将数据追加到文件尾部

O_CREATE 如果文件不存在,则创建一个新的文件

O_EXCL 文件必须不存在,然后会创建一个新的文件

O_SYNC 打开同步I/0

O_TRUNC 文件打开时可以截断

第三个参数,如0666

 

3.写入文件:文件对象.Write(...),文件对象.WriteAt(...),文件对象.WriteString(string)

func (f *File) Write(b []byte) (n int, err error)
func (f *File) WriteAt(b []byte, off int64) (n int, err error)
func (f *File) WriteString(s string) (n int, err error)

 

func main() {
  // 进入桌面目录
  os.Chdir("/Users/xujie/Desktop")
  // 创建一个文件夹
 file,error:= os.OpenFile("file.txt",os.O_RDWR,0666)
 defer file.Close()
 if error != nil {
   fmt.Println(error)
 }
 _,error = file.WriteString("你好")
  _,error = file.WriteString("从天有一个书")
  fmt.Println(error)
}

 

上面完成了文件的写入,我们发现文件原来的内容已经被替换掉了。

如果我们只想向文件中追加部分内容该如何实现?

func main() {
  // 进入桌面目录
  os.Chdir("/Users/xujie/Desktop")
  // 创建一个文件夹
 file,error:= os.OpenFile("file.txt",os.O_RDWR|os.O_APPEND,0666)
 defer file.Close()
 if error != nil {
   fmt.Println(error)
 }
 _,error = file.WriteString("\n---酷走天涯")
  fmt.Println(error)
}

 

4.读取文件:文件对象.Read(data)

func main() {
  // 进入桌面目录
  os.Chdir("/Users/xujie/Desktop")
 file,error:= os.Open("file.txt")

 defer file.Close()
 if error != nil {
   fmt.Println(error)
   return
 }
  fileInfo,_ := file.Stat()
  fmt.Println(fileInfo.Size())
  
  // 创建缓冲区
 data := make([]byte,fileInfo.Size())
 // 一次性读取所有内容到缓冲区中
 _,error = file.Read(data)

  fmt.Println(error)
 fmt.Println(string(data))
}

 

那么如何多次读取文件里面的内容呢

func main() {
  // 进入桌面目录
  os.Chdir("/Users/xujie/Desktop")
 file,error:= os.Open("file.txt")

 defer file.Close()
 if error != nil {
   fmt.Println(error)
   return
 }
  fileInfo,_ := file.Stat()
  fmt.Println(fileInfo.Size())

  // 创建缓冲区
  var max = 3
  var offset int64 = 0
  data := make([]byte,max)
 // 多次读取缓冲区内容

 for {
   _,error = file.ReadAt(data,offset)
   if error != nil {
     fmt.Println(error)
     break;
   }
   offset += 3
   fmt.Println(string(data))

 }

 

5.关闭文件:文件对象.Close()

6.删除文件或文件夹

error := os.Remove("/Users/xujie/Desktop/file.txt")

 

四、文件状态等操作

1.修改文件权限:文件对象.Chmod(权限)

func main() {
  file,_:= os.OpenFile("/Users/xujie/Desktop/file.txt",os.O_RDWR|os.O_APPEND,777)
  fileInfo,_ := file.Stat()
  fmt.Println(fileInfo.Mode())

  err := file.Chmod(0444)
  if err != nil{
    fmt.Println(err)
  }
  fileInfo,_ = file.Stat()
  fmt.Println(fileInfo.Mode())

}

2.获取文件的状态:os.Stat(文件名称).Name()....IsDir()....Mode()

func main() {
  filename := "/Users/xujie/Desktop/file.txt"
  file,_:=os.Stat(filename)
  fmt.Println(file.Name())
  fmt.Println(file.IsDir())
  fmt.Println(file.Size())
  fmt.Println(file.Mode())
  fmt.Println(file.Sys())
}

 

3.错误检测

func IsExist(err error) bool // 文件存在,但是由系统产生错误
func IsNotExist(err error) bool // 目录或者文件不存在时返回true
func IsPermission(err error)bool // 检测是不是由于权限不足导致的错误

 

func main() {
  filename := "file.txt"
  _, err := os.Stat(filename);
  fmt.Println(os.IsExist(err))
  fmt.Println(os.IsNotExist(err))
}

 

package main

import (
  "os"
    "fmt"
)

func main() {
  os.Chdir("/Users/xujie/Desktop")
  file,error := os.OpenFile("file.txt",os.O_RDWR,0444)
  if error != nil {
    fmt.Println(os.IsPermission(error))
    fmt.Println(os.IsPermission(error))
    return
  }
  _,error = file.WriteString("neirong")
   if error != nil {
     fmt.Println(error)
     fmt.Println(os.IsPermission(error))
   }
}

4.修改文件夹或者文件的名称

移动文件夹或者文件

检测文件是否是同一个

获取文件模式相关信息

查看文件名称

如何查看所有文件夹下的所有文件和文件数量

获取文件对应的unix文件描述符

  • 48.设置文件的读写位置
  • 49.修改文件权限
    • 44.创建软链接
    • 45.获取软链接文件对应的实际文件路径地址
    • 46.更改指定文件的访问和修改时间
       
      • 33.强制改变文件大小
      • 34.硬链接
      • 35.同步保存当前文件的内容
      • 36.NewFile使用给出的Unix文件描述符和名称创建一个文件
      • 37.Lstat返回一个描述name指定的文件对象的FileInfo
      • 40.获取当前程序可执行的文件地址
         

获取当前目录

修改当前目录

创建文件夹

删除文件夹或者文件

修改文件夹或者文件的名称

移动文件夹或者文件

把文件所在的目录切换为当前目录

获取临时目录的文件夹路径

读取文件夹的下面文件的名称

47.创建文件夹,并设置权限

 

获取用户uid 和 群组gid

查看用户所属组的列表

获取调用者有效的用户标识

.Chown修改文件的用户ID和组ID

 

 

.获取当前进程id 和其父进程id

通过pid查找进行进程

  • 53.启动一个进程
  • 54.杀死进程
  • 55.释放与进行p关联的任何资源

 

  • 11.错误检测
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.判断字符是否是支持的路径分割符
  • 31.
  • 32
  • 42.让程序已给定的状态码退出
  • 50.管道的用法
  • 51.创建系统错误

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM