欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go讀取文件與寫入文件的三種方法操作指南

 更新時間:2022年09月16日 11:57:19   作者:心鴿  
在 Go 語言中也經(jīng)常會遇到操作文件的需求,下面這篇文章主要給大家介紹了關于Go讀取文件與寫入文件的三種方法操作,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

打開和關閉文件操作:

os.Open()函數(shù)能夠打開一個文件,返回一個*File和一個err。對得到的文件實例調(diào)用close()方法能夠關閉文件。

package main
import (
    "fmt"
    "os"
)
//文件操作
func main(){
    //打開文件
    file, err := os.Open("./test.txt") //只是用來讀的時候,用os.Open。相對路徑,針對于同目錄下。
    if err != nil{
        fmt.Printf("打開文件失敗,err:%v\n",err)
        return
    }
    defer file.Close() //關閉文件,為了避免文件泄露和忘記寫關閉文件
}

打開文件讀取內(nèi)容并關閉文件:

package main

import (
    "fmt"
    "os"
)
//文件操作
func main(){
    //打開文件
    file, err := os.Open("./test.txt") //只是用來讀的時候,用os.Open。相對路徑,針對于同目錄下。
    if err != nil{
        fmt.Printf("打開文件失敗,err:%v\n",err)
        return
    }
    defer file.Close() //關閉文件,為了避免文件泄露和忘記寫關閉文件
    //讀取文件內(nèi)容
    var qiepian = make([]byte,128) //做一個大小為128字節(jié)的切片
    n, err := file.Read(qiepian) //file.Read里面是一個切片.如果讀取成功,那么值聲明變量n并同時賦值給n。
    //判斷
    if err != nil{ //if err != nil 意思是如果err不為空,那么就說明err有錯誤值,打印讀取錯誤。如果為空,說明err沒有錯誤值,打印讀取成功
        fmt.Printf("讀取文件錯誤,錯誤值為:%v\n",err)
        return
    }
    fmt.Printf("讀取文件成功,文件字節(jié)大小為:%d\n",n)
    fmt.Println(string(qiepian))
}

但是如果文件的字節(jié)大小大于128呢?

如果文件有1W個字節(jié),但是我們設置的一次只能讀取128個,怎么樣才能全部讀取文件內(nèi)容?

用循環(huán)讀取,一次讀128,直到讀完。

func readall(){
    //打開文件
    file, err := os.Open("./test.txt") //只是用來讀的時候,用os.Open。相對路徑,針對于同目錄下。
    if err != nil{
        fmt.Printf("打開文件失敗,err:%v\n",err)
        return
    }
    defer file.Close() //關閉文件,為了避免文件泄露和忘記寫關閉文件
    
    //讀取文件內(nèi)容
    for {
        var qiepian = make([]byte,128) //做一個大小為128字節(jié)的切片
        n, err := file.Read(qiepian) //file.Read里面是一個切片.如果讀取成功,那么值聲明變量n并同時賦值給n。
        if err == io.EOF{ //EOF表示 end of file,就是文件的末尾,這個判斷意思就是,讀到文件末尾的時候,將當前讀了多少字節(jié)打印出來并退出
            //把當前讀了多少字節(jié)的數(shù)據(jù)打印出來,然后退出
            fmt.Println(string(qiepian))
            return
        }
        //判斷
        if err != nil{ //if err != nil 意思是如果err不為空,那么就說明err有錯誤值,打印讀取錯誤。如果為空,說明err沒有錯誤值,打印讀取成功
            fmt.Printf("讀取文件錯誤,錯誤值為:%v\n",err)
            return
        }
        fmt.Printf("讀取文件成功,文件字節(jié)大小為:%d\n",n)
        fmt.Println(string(qiepian[:n]))
    }
}
func main(){
    readall()
}

但是這樣寫,有點太麻煩。

基于此,使用go語言中的內(nèi)置包,buffio和ioutil來讀取

buffio操作:

是在file基礎上封裝了一層IP。

先把磁盤的內(nèi)容讀到緩沖區(qū),然后再讀到代碼中去。

寫入是先將寫入的內(nèi)容寫到緩沖區(qū),然后再寫到磁盤中去。

func readBybuffio(){
    //打開文件
    file, err := os.Open("./test.txt") //只是用來讀的時候,用os.Open。相對路徑,針對于同目錄下。
    if err != nil{
        fmt.Printf("打開文件失敗,err:%v\n",err)
        return
    }
    defer file.Close() //關閉文件,為了避免文件泄露和忘記寫關閉文件

    //使用buffio讀取文件內(nèi)容
    reader := bufio.NewReader(file) //創(chuàng)建新的讀的對象
    for {
        line , err := reader.ReadString('\n') //注意是字符,換行符。
        if err == io.EOF{ 
            fmt.Println("文件讀完了")
            break
        }
        if err != nil{ //錯誤處理
            fmt.Printf("讀取文件失敗,錯誤為:%v",err)
            return
        }
        fmt.Println(line)
    }   
}

func main(){
    readBybuffio()
}

ioutil讀取整個文件:

//ioutuil
func readByioutil(){
    iot,err := ioutil.ReadFile("./test.txt") //讀取文件
    if err != nil{ //做錯誤判斷
        fmt.Printf("讀取文件錯誤,錯誤為:%v\n",err)
        return
    }
    fmt.Println(string(iot)) //打印文件內(nèi)容
}

所以我們可以得知,go語言中讀取文件的三種方法。

第一種,我們可以使用切片的形式,定制一次讀取文件的多少字節(jié)并用for循環(huán)來讀取文件的內(nèi)容。

第二種,我們可以使用go語言內(nèi)置的buffio包來一行一行的讀取文件的內(nèi)容。

第三種,我們可以使用go語言內(nèi)置的ioutil包來讀取整個文件的所有內(nèi)容。

文件寫入操作

os.OpenFile()函數(shù)能夠以指定模式打開文件,從而實現(xiàn)文件寫入相關功能。

Write和WriteString寫入操作

package main

import (
    "fmt"
    "os"
)

//文件寫入
func write(){
    //os.O_CREATE:創(chuàng)建
    //os.O_WRONLY:只寫
    //os.O_APPEND:追加
    //os.O_RDONLY:只讀
    //os.O_RDWR:讀寫
    //os.O_TRUNC:清空

    //0644:文件的權限
    //如果沒有test.txt這個文件那么就創(chuàng)建,并且對這個文件只進行寫和追加內(nèi)容。
    file,err := os.OpenFile("./test.txt",os.O_CREATE|os.O_WRONLY|os.O_APPEND,0644)
    if err != nil{
        fmt.Printf("文件錯誤,錯誤為:%v\n",err)
        return
    }
    defer file.Close()
    str := "你好啊\n"
    file.Write([]byte(str)) //將str字符串的內(nèi)容寫到文件中,強制轉換為byte,因為Write接收的是byte。
    file.WriteString("Hello") //寫字符串
}
func main(){
    write()
}

使用buffio內(nèi)置包來讀文件

bufio.NewWriter: 先往緩沖區(qū)寫,然后才寫到磁盤中去。

func buffiowrite(){
    file,err := os.OpenFile("./gch.txt",os.O_CREATE|os.O_WRONLY|os.O_TRUNC,0644)
    if err != nil{
        fmt.Printf("打開文件失敗,錯誤為:%v\n",err)
        return
    }
    defer file.Close() //關閉文件
    
    writer := bufio.NewWriter(file) //往文件里面寫入內(nèi)容,得到了一個writer對象
    for i := 0; i <10; i++ { //循環(huán)寫入10行
        writer.WriteString("test\n") //將數(shù)據(jù)寫入緩存
    }
    writer.Flush() //將緩存中內(nèi)容的寫入文件
}

第三種寫入文件方法:ioutil.WriteFile

func ioutilWrite(){
    str := "Hello Golang!"
    err := ioutil.WriteFile("./ioutil.txt",[]byte(str),0664)//接收文件名,字節(jié)類型的數(shù)據(jù),文件的權限
    if err != nil{
        fmt.Printf("打開文件失敗,錯誤為:%v\n",err)
        return
    }
}

總結

到此這篇關于Go讀取文件與寫入文件的三種方法操作的文章就介紹到這了,更多相關Go讀取文件與寫入文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 簡單對比一下?C語言?與?Go語言

    簡單對比一下?C語言?與?Go語言

    這篇文章主要介紹了簡單對比一下?C語言?與?Go語言的相關資料,需要的朋友可以參考下
    2023-08-08
  • Go 標準庫增加metrics指標探討分析

    Go 標準庫增加metrics指標探討分析

    go中有一個神奇的標準庫 runtime/metrics,提供了一系列預定義好的 Go 自身的相關指標,如果沒有編寫過基礎監(jiān)控庫或者關注的比較少的朋友可能會沒接觸到這類指標,本文展開現(xiàn)有metrics 指標,并結合現(xiàn)有的社區(qū)討論一起看看還有沒有必要增加更多的標準庫指標
    2023-10-10
  • 一文帶你吃透Go語言中的原子操作

    一文帶你吃透Go語言中的原子操作

    原子操作是解決并發(fā)編程中共享數(shù)據(jù)訪問問題的一種常見機制,下面就來和大家深入介紹原子操作的原理、用法以及在解決并發(fā)問題中的應用,需要的可以參考一下
    2023-06-06
  • go reflect要不要傳指針原理詳解

    go reflect要不要傳指針原理詳解

    這篇文章主要為大家介紹了go reflect要不要傳指針原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Golang實現(xiàn)自己的orm框架實例探索

    Golang實現(xiàn)自己的orm框架實例探索

    這篇文章主要為大家介紹了Golang實現(xiàn)自己的orm框架實例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • go語言實現(xiàn)markdown解析庫的方法示例

    go語言實現(xiàn)markdown解析庫的方法示例

    這篇文章主要介紹了go語言實現(xiàn)markdown解析庫的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • Go json反序列化“null“的問題解決

    Go json反序列化“null“的問題解決

    本文主要介紹了Go json反序列化“null“的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • golang中set數(shù)據(jù)結構的使用示例

    golang中set數(shù)據(jù)結構的使用示例

    本文主要介紹了golang中set數(shù)據(jù)結構的使用示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • golang如何去除字符串的換行符

    golang如何去除字符串的換行符

    這篇文章主要介紹了golang如何去除字符串的換行符問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Go語言kylin任務自動化實例詳解

    Go語言kylin任務自動化實例詳解

    這篇文章主要為大家介紹了Go語言kylin任務自動化實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06

最新評論