看了下go語言的標準庫,最開始看了下io庫想著看看go語言提供的函數如何實現文件的讀寫,粗略的看了下就想著使用go語言提供的方法讀寫文件試下吧。 讀文件,示例:
package mainimport ( "fmt" "io/ioutil" "os")const ( FILE = "./test.txt")//Read filefunc main(){ fd,err := os.Open(FILE) //打開文件 if err != nil{ fmt.按照C語言的方式進行了文件的讀寫后,才發現Go語言提供了更方便的方法使用ioutil庫中的ReadFile函數可直接讀取函數。 寫文件,示例://write filefunc main(){ dstr := []byte("this is a test") err := ioutil.WriteFile(FILE,dstr,0777) if err != nil{ fmt.Println("write file err") } dstr := []byte("this is a test") fd,err := os.OpenFile(FILE,os.O_APPEND,0777) if err != nil{ fmt.Println("open file error") } defer fd.Close() num,err := fd.Write(dstr) if err != nil{ fmt.Println(err) } fmt.Println(num)}同樣Go語言也提供了WriteFile函數直接寫文件,但是在使用C的方式寫文件的時候與C語言有一些小的差別。我們知道C語言在寫文件時在使用open函數打開文件獲取文件句柄時只需要兩個參數(文件名,權限)而在Go語言中使用Open函數打開文件只有讀的權限。然而我們可以使用os.OpenFile函數打開文件并附權限。Go語言還提供了Create函數創建可寫文件。Create采用模式0666(任何人都可讀寫,不可執行)創建一個名為name的文件,如果文件已存在會截斷它(為空文件)。如果成功,返回的文件對象可用于I/O;對應的文件描述符具有O_RDWR模式。 權限說明: O_RDONLY int = syscall.O_RDONLY // 只讀 O_WRONLY int = syscall.O_WRONLY // 只寫 O_RDWR int = syscall.O_RDWR // 讀寫 O_APPEND int = syscall.O_APPEND // 在文件末尾追加,打開后cursor在文件結尾位置 O_CREATE int = syscall.O_CREAT // 如果不存在則創建 O_EXCL int = syscall.O_EXCL //與O_CREATE一起用,構成一個新建文件的功能,它要求文件必須不存在 O_SYNC int = syscall.O_SYNC // 同步方式打開,沒有緩存,這樣寫入內容直接寫入硬盤,系統掉電文件內容有一定保證 O_TRUNC int = syscall.O_TRUNC // 打開并清空文件 ioutil.WriteFile函數向filename指定的文件中寫入數據。如果文件不存在將按給出的權限創建文件,否則在寫入數據之前清空文件。 權限說明:
const ( // The single letters are the abbreviations // used by the String method's formatting. ModeDir FileMode = 1 << (32 - 1 - iota) // d: is a directory ModeAppend // a: append-only ModeExclusive // l: exclusive use ModeTemporary // T: temporary file (not backed up) ModeSymlink // L: symbolic link ModeDevice // D: device file ModeNamedPipe // p: named pipe (FIFO) ModeSocket // S: Unix domain socket ModeSetuid // u: setuid ModeSetgid // g: setgid ModeCharDevice // c: Unix character device, when ModeDevice is set ModeSticky // t: sticky // Mask for the type bits. For regular files, none will be set. ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice ModePerm FileMode = 0777 // Unix permission bits)新聞熱點
疑難解答