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