91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang的os標準庫中常用函數的示例分析

發布時間:2021-09-17 15:47:54 來源:億速云 閱讀:137 作者:柒染 欄目:編程語言

Golang的os標準庫中常用函數的示例分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

os.Rename()這個函數的原型是func Rename(oldname, newname string) error,輸入的是舊文件名,新文件名,然后返回一個error其實這個函數的真正實現用的syscall.Rename()然后通過MoveFile(from *uint16, to *uint16) (err error) = MoveFileW來重新命名

復制代碼 代碼如下:


 import (
 "fmt"
 "os"
)

func main() {
 err := os.Rename("1.go", "2.go")
 if err != nil {
  if os.IsExist(err) { //判斷一個是否文件已經存在的錯誤
   fmt.Println("文件已經存在")
   os.Rename("1.go", "widuu_1.go")
  }
 }
}

os.SameFile()這個函數的作用是檢測文件的信息是否相同所謂文件信息指的是os.Stat(),函數原型是func SameFile(fi1, fi2 FileInfo) bool
舉個例子

復制代碼 代碼如下:


import (
 "fmt"
 "os"
)

func main() {
 f1, _ := os.Stat("1.go")
 f2, _ := os.Stat("21.go")
 if os.SameFile(f1, f2) {
  fmt.Println("兩個文件一樣")
  return
 }
 fmt.Println("兩個文件不一樣")
}

os.Setenv()這個函數是設置環境變量的很簡單,函數原型func Setenv(key, value string) error輸入對應的key-value字符串,返回error信息

復制代碼 代碼如下:


import (
 "fmt"
 "os"
)

func main() {
 err := os.Setenv("WD_PATH", "D:/golang")
 if err != nil {
  fmt.Println(err)
 }
 env := os.Getenv("WD_PATH")
 fmt.Println(env) //返回的是D:/golang
}

os.Symlink()對于這個函數我只能說不支持windows平臺的,創建軟連接func Symlink(oldname, newname string) error

復制代碼 代碼如下:


import (
 "fmt"
 "os"
)

func main() {
 err := os.Symlink("1.go", "21.go") //不支持windows平臺只支持linux和unix
 fmt.Println(err)
}

os.TempDir()這個函數很簡單,返回你本地的系統temp目錄,函數原型func TempDir() string,嘿嘿,做個對比別亂了

復制代碼 代碼如下:


import (
 "fmt"
 "io/ioutil"
 "os"
)

func main() {
 //創建臨時的tmp
 dir, _ := os.Getwd()
 path, _ := ioutil.TempDir(dir, "tmp")
 fmt.Println(path) //D:\test\tmp764030415
 //這個返回的是系統temp
 temp := os.TempDir()
 fmt.Println(temp) //windows來說C:\Users\ADMINI~1\AppData\Local\Temp
}

os.Truncate()改變文件的f.Size()這個就改變了文件內容的長度了,函數原型func Truncate(name string, size int64) error,記得哈第二個是int64

復制代碼 代碼如下:


import (
 "fmt"
 "os"
)

func main() {
 f, _ := os.Stat("1.go")
 fmt.Println(f.Size())   //1.go 83
 err := os.Truncate("1.go", 10) 
 if err != nil {
  fmt.Println(err)
 }
 f, _ = os.Stat("1.go")
 fmt.Println(f.Size())    //1.go現在是10 文件也變成了package ma
}

os.Create()這個函數是創見一個文件,函數的原型是func Create(name string) (file *File, err error)輸入的是名稱字符串類型,返回的是一個File的指針和一個error

復制代碼 代碼如下:


import (
 "fmt"
 "os"
 "reflect"
)

func main() {
 f, _ := os.Create("widuu_2.go")
 defer f.Close()
 fmt.Println(reflect.ValueOf(f).Type()) //*os.File
}

這個函數的原理其實是這樣的OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666) O_RDWR也就是說用讀寫的權限,O_CREATE然后文件存在忽略,不存在創建它,O_TRUNC文件存在截取長度為0,這就解釋了為什么我們明明有這個文件,我擦,創建之后哭了~啥都沒有了~~用的時候需謹慎,先判斷文件是否存在~

os.OpenFile函數的原型是func OpenFile(name string, flag int, perm FileMode) (file *File, err error)要指定文件權限和打開的方式,就是我們上邊所用到的

復制代碼 代碼如下:


import (
 "fmt"
 "os"
)

func main() {
 f, _ := os.OpenFile("10.go", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
 defer f.Close()
 fmt.Println(f.Stat())
}

這個就是上邊的Create()只不過權限是0777以及下邊的操作等大部分用到OpenFile()

os.Open()這個函數是打開文件使用的,函數原型是func Open(name string) (file *File, err error),返回值就不說了一樣的,它的其實原理是這樣的OpenFile(name, O_RDONLY, 0)以讀文件的模式打開

復制代碼 代碼如下:


import (
 "fmt"
 "os"
 "reflect"
)

func main() {
 f, _ := os.Open("1.go")
 defer f.Close()
}

os.Stat()這個是獲取fileinfo的結構描述func Stat(name string) (fi FileInfo, err error)返回了Fileinfo這個結構,我們再前邊也詳細講了
,其實它是怎么實現的呢?因為我們沒講syscall所以我們就講一個,譬如FileInfo底層獲取fs := &fileStat{name: basename(name)}然后后邊邏輯大家可以看源代碼

復制代碼 代碼如下:


import (
 "fmt"
 "os"
)

func main() {
 f, _ := os.Stat("1.go")
 fmt.Println(f.Size())
}

os.Fd()返回文件的句柄,函數原型是func (file *File) Fd() uintptr函數是這樣的uintptr(file.fd) 返回的是文件的句柄,句柄是什么?句柄,是整個windows編程的基礎。一個句柄是指使用的一個唯一的整數

復制代碼 代碼如下:


import (
 "fmt"
 "os"
)

func main() {
 f, _ := os.Open("1.go")
 fmt.Println(f.Fd()) //我的平臺句柄是228
}

os.Pipe()這個函數獲取的函數的讀寫指針,函數原型func Pipe() (r *File, w *File, err error)

復制代碼 代碼如下:


import (
 "fmt"
 "os"
)

func main() {
 r, w, _ := os.Pipe()
 fmt.Println(r, w) //&{0xc08402e120} &{0xc08402e180}
}

os.NewFile()函數原型是func NewFile(fd uintptr, name string) *File 第一個傳入的是句柄,然后是文件名稱,這個函數并不是真的創建了一個文件,是新建一個文件不保存,然后返回文件的指針

復制代碼 代碼如下:


import (
 "fmt"
 "os"
)

func main() {
 f, _ := os.Open("ini.go")
 defer f.Close()
 f1 := os.NewFile(f.Fd(), "ceshi.go") //輸如ini.go的句柄
 defer f1.Close()
 fd, _ := f1.Stat()
 fmt.Println(fd.ModTime()) //返回的是ini.go的創建時間2013-11-27 09:11:50.2793737 +0800 CST

}

(f *File).Chdir()修改工作目錄,函數原型func (f *File) Chdir() error,這個時候f必須是目錄了,但是吧這個不支持windows

復制代碼 代碼如下:


import (
 "fmt"
 "os"
)

func main() {
 dir, _ := os.Getwd()
 fmt.Println(dir)
 f, _ := os.Open("views")
 err := f.Chdir()
 if err != nil {
  fmt.Println(err)
 }
 dir1, _ := os.Getwd()
 fmt.Println(dir1)
}

關于Golang的os標準庫中常用函數的示例分析問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

go os
AI

奈曼旗| 建瓯市| 阿荣旗| 华坪县| 大厂| 博乐市| 延寿县| 无为县| 招远市| 新巴尔虎右旗| 长治县| 庄河市| 盐边县| 龙陵县| 浦县| 万山特区| 固始县| 青神县| 高要市| 呼图壁县| 绍兴市| 太康县| 阳东县| 洱源县| 石首市| 都昌县| 高安市| 临西县| 贺兰县| 林州市| 修武县| 泰顺县| 新平| 东莞市| 白城市| 阿城市| 黄陵县| 阜阳市| 美姑县| 新竹县| 高安市|