佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > Golang的os標(biāo)準(zhǔn)庫(kù)中常用函數(shù)的整理介紹

Golang的os標(biāo)準(zhǔn)庫(kù)中常用函數(shù)的整理介紹

熱門標(biāo)簽:Linux服務(wù)器 鐵路電話系統(tǒng) 呼叫中心市場(chǎng)需求 網(wǎng)站排名優(yōu)化 地方門戶網(wǎng)站 百度競(jìng)價(jià)排名 服務(wù)外包 AI電銷

os.Rename()這個(gè)函數(shù)的原型是func Rename(oldname, newname string) error,輸入的是舊文件名,新文件名,然后返回一個(gè)error其實(shí)這個(gè)函數(shù)的真正實(shí)現(xiàn)用的syscall.Rename()然后通過(guò)MoveFile(from *uint16, to *uint16) (err error) = MoveFileW來(lái)重新命名

復(fù)制代碼 代碼如下:

 import (
 "fmt"
 "os"
)

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


os.SameFile()這個(gè)函數(shù)的作用是檢測(cè)文件的信息是否相同所謂文件信息指的是os.Stat(),函數(shù)原型是func SameFile(fi1, fi2 FileInfo) bool
舉個(gè)例子
復(fù)制代碼 代碼如下:

import (
 "fmt"
 "os"
)

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


os.Setenv()這個(gè)函數(shù)是設(shè)置環(huán)境變量的很簡(jiǎn)單,函數(shù)原型func Setenv(key, value string) error輸入對(duì)應(yīng)的key-value字符串,返回error信息
復(fù)制代碼 代碼如下:

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()對(duì)于這個(gè)函數(shù)我只能說(shuō)不支持windows平臺(tái)的,創(chuàng)建軟連接func Symlink(oldname, newname string) error
復(fù)制代碼 代碼如下:

import (
 "fmt"
 "os"
)

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


os.TempDir()這個(gè)函數(shù)很簡(jiǎn)單,返回你本地的系統(tǒng)temp目錄,函數(shù)原型func TempDir() string,嘿嘿,做個(gè)對(duì)比別亂了
復(fù)制代碼 代碼如下:

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

func main() {
 //創(chuàng)建臨時(shí)的tmp
 dir, _ := os.Getwd()
 path, _ := ioutil.TempDir(dir, "tmp")
 fmt.Println(path) //D:\test\tmp764030415
 //這個(gè)返回的是系統(tǒng)temp
 temp := os.TempDir()
 fmt.Println(temp) //windows來(lái)說(shuō)C:\Users\ADMINI~1\AppData\Local\Temp
}


os.Truncate()改變文件的f.Size()這個(gè)就改變了文件內(nèi)容的長(zhǎng)度了,函數(shù)原型func Truncate(name string, size int64) error,記得哈第二個(gè)是int64
復(fù)制代碼 代碼如下:

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現(xiàn)在是10 文件也變成了package ma
}


os.Create()這個(gè)函數(shù)是創(chuàng)見一個(gè)文件,函數(shù)的原型是func Create(name string) (file *File, err error)輸入的是名稱字符串類型,返回的是一個(gè)File的指針和一個(gè)error
復(fù)制代碼 代碼如下:

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

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


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

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

復(fù)制代碼 代碼如下:

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


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

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

復(fù)制代碼 代碼如下:

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

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


os.Stat()這個(gè)是獲取fileinfo的結(jié)構(gòu)描述func Stat(name string) (fi FileInfo, err error)返回了Fileinfo這個(gè)結(jié)構(gòu),我們?cè)偾斑呉苍敿?xì)講了
,其實(shí)它是怎么實(shí)現(xiàn)的呢?因?yàn)槲覀儧]講syscall所以我們就講一個(gè),譬如FileInfo底層獲取fs := fileStat{name: basename(name)}然后后邊邏輯大家可以看源代碼
復(fù)制代碼 代碼如下:

import (
 "fmt"
 "os"
)

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


os.Fd()返回文件的句柄,函數(shù)原型是func (file *File) Fd() uintptr函數(shù)是這樣的uintptr(file.fd) 返回的是文件的句柄,句柄是什么?句柄,是整個(gè)windows編程的基礎(chǔ)。一個(gè)句柄是指使用的一個(gè)唯一的整數(shù)
復(fù)制代碼 代碼如下:

import (
 "fmt"
 "os"
)

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


os.Pipe()這個(gè)函數(shù)獲取的函數(shù)的讀寫指針,函數(shù)原型func Pipe() (r *File, w *File, err error)
復(fù)制代碼 代碼如下:

import (
 "fmt"
 "os"
)

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


os.NewFile()函數(shù)原型是func NewFile(fd uintptr, name string) *File 第一個(gè)傳入的是句柄,然后是文件名稱,這個(gè)函數(shù)并不是真的創(chuàng)建了一個(gè)文件,是新建一個(gè)文件不保存,然后返回文件的指針
復(fù)制代碼 代碼如下:

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的創(chuàng)建時(shí)間2013-11-27 09:11:50.2793737 +0800 CST

}


(f *File).Chdir()修改工作目錄,函數(shù)原型func (f *File) Chdir() error,這個(gè)時(shí)候f必須是目錄了,但是吧這個(gè)不支持windows
復(fù)制代碼 代碼如下:

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 中使用WaitGroup的那點(diǎn)坑
  • 在golang中使用Sync.WaitGroup解決等待的問(wèn)題
  • Golang中的sync包的WaitGroup操作
  • Golang中的sync.WaitGroup用法實(shí)例
  • Golang標(biāo)準(zhǔn)庫(kù)syscall詳解(什么是系統(tǒng)調(diào)用)
  • Golang 標(biāo)準(zhǔn)庫(kù) tips之waitgroup詳解

標(biāo)簽:黃山 湘潭 湖南 衡水 崇左 銅川 蘭州 仙桃

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang的os標(biāo)準(zhǔn)庫(kù)中常用函數(shù)的整理介紹》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    夏邑县| 堆龙德庆县| 赫章县| 延津县| 太康县| 龙门县| 祁阳县| 高淳县| 都兰县| 嘉禾县| 呼图壁县| 江津市| 永吉县| 华容县| 兰坪| 石狮市| 乐昌市| 贡嘎县| 丰镇市| 克什克腾旗| 永昌县| 延庆县| 花莲县| 新竹县| 新河县| 通州区| 博野县| 甘泉县| 汝城县| 西乌珠穆沁旗| 上高县| 海兴县| 班戈县| 宁安市| 塘沽区| 城固县| 弥渡县| 宁波市| 长葛市| 桂平市| 文昌市|