So lesen Sie Dateien in Golang

藏色散人
Freigeben: 2020-03-21 11:32:09
Original
5409 Leute haben es durchsucht

So lesen Sie Dateien in Golang

Wie lese ich Dateien in Golang?

Vier Möglichkeiten, Dateien in Golang zu lesen

Dateien lesen

Die gelesenen Dateien werden in Datei/Test abgelegt: das heißt, die Testdatei unter dem Dateipaket , schreibe weitere Dateien hinein

Datei lesen Methode eins: Verwenden Sie ioutil.ReadFile, um direkt aus der Datei in []Byte zu lesen

func Read0()  (string){
    f, err := ioutil.ReadFile("file/test")
    if err != nil {
        fmt.Println("read fail", err)
    }
    return string(f)
}
Nach dem Login kopieren

Datei lesen Methode zwei: Zuerst von Datei zu Datei lesen In , beim Lesen von Datei zu BUF wird BUF an das letzte []Byte angehängt

func Read1()  (string){
    //获得一个file
    f, err := os.Open("file/test")
    if err != nil {
        fmt.Println("read fail")
        return ""
    }
    //把file读取到缓冲区中
    defer f.Close()
    var chunk []byte
    buf := make([]byte, 1024)
    for {
        //从file读取到buf中
        n, err := f.Read(buf)
        if err != nil && err != io.EOF{
            fmt.Println("read buf fail", err)
            return ""
        }
        //说明读取结束
        if n == 0 {
            break
        }
        //读取到最终的缓冲区中
        chunk = append(chunk, buf[:n]...)
    }
    return string(chunk)
    //fmt.Println(string(chunk))
}
Nach dem Login kopieren

Datei lesen Methode drei: Zuerst von Datei zu Datei lesen, dann von Datei zum Reader lesen, vom Reader Buf, buf lesen wird schließlich an []byte angehängt

//先从文件读取到file, 在从file读取到Reader中,从Reader读取到buf, buf最终追加到[]byte,这个排第三
func Read2() (string) {
    fi, err := os.Open("file/test")
    if err != nil {
        panic(err)
    }
    defer fi.Close()
    r := bufio.NewReader(fi)
    var chunks []byte
    buf := make([]byte, 1024)
    for {
        n, err := r.Read(buf)
        if err != nil && err != io.EOF {
            panic(err)
        }
        if 0 == n {
            break
        }
        //fmt.Println(string(buf))
        chunks = append(chunks, buf...)
    }
    return string(chunks)
    //fmt.Println(string(chunks))
}
Nach dem Login kopieren

Vierte Möglichkeit, Dateien zu lesen: In die Datei einlesen und dann mit ioutil die Datei direkt in []byte

//读取到file中,再利用ioutil将file直接读取到[]byte中, 这是最优
func Read3()  (string){
    f, err := os.Open("file/test")
    if err != nil {
        fmt.Println("read file fail", err)
        return ""
    }
    defer f.Close()
    fd, err := ioutil.ReadAll(f)
    if err != nil {
        fmt.Println("read to fd fail", err)
        return ""
    }
    return string(fd)
}
Nach dem Login kopieren

Lesegeschwindigkeitsvergleich

einlesen

Nach meinem Test ist die Lesegeschwindigkeitsbewertung dieser vier Methoden überlegen

Methode 4> Methode 3> Methode 4

Datei schreiben

Datei schreiben Methode eins: Verwenden Sie io.WriteString, um eine Datei zu schreiben

func Write0()  {
    fileName := "file/test1"
    strTest := "测试测试"
    var f *os.File
    var err error
    if CheckFileExist(fileName) {  //文件存在
        f, err = os.OpenFile(fileName, os.O_APPEND, 0666) //打开文件
        if err != nil{
            fmt.Println("file open fail", err)
            return
        }
    }else {  //文件不存在
        f, err = os.Create(fileName) //创建文件
        if err != nil {
            fmt.Println("file create fail")
            return
        }
    }
    //将文件写进去
    n, err1 := io.WriteString(f, strTest)
    if err1 != nil {
        fmt.Println("write error", err1)
        return
    }
    fmt.Println("写入的字节数是:", n)
}
Nach dem Login kopieren

Datei schreiben Methode zwei: Verwenden Sie ioutil.WriteFile, um eine Datei zu schreiben

func Write1()  {
    fileName := "file/test2"
    strTest := "测试测试"
    var d = []byte(strTest)
    err := ioutil.WriteFile(fileName, d, 0666)
    if err != nil {
        fmt.Println("write fail")
    }
    fmt.Println("write success")
}
Nach dem Login kopieren

Die dritte Möglichkeit, eine Datei zu schreiben: Verwenden Sie Datei (Write,WriteString) zum Schreiben der Datei

func Write2()  {
    fileName := "file/test3"
    strTest := "测试测试"
    var d1 = []byte(strTest)
    f, err3 := os.Create(fileName) //创建文件
    if err3 != nil{
        fmt.Println("create file fail")
    }
    defer f.Close()
    n2, err3 := f.Write(d1) //写入文件(字节数组)
    fmt.Printf("写入 %d 个字节n", n2)
    n3, err3 := f.WriteString("writesn") //写入文件(字节数组)
    fmt.Printf("写入 %d 个字节n", n3)
    f.Sync()
}
Nach dem Login kopieren

Die vierte Möglichkeit, die Datei zu schreiben: Verwenden Sie bufio.NewWriter, um die Datei

func Write3()  {
    fileName := "file/test3"
    f, err3 := os.Create(fileName) //创建文件
    if err3 != nil{
        fmt.Println("create file fail")
    }
    w := bufio.NewWriter(f) //创建新的 Writer 对象
    n4, err3 := w.WriteString("bufferedn")
    fmt.Printf("写入 %d 个字节n", n4)
    w.Flush()
    f.Close()
}
Nach dem Login kopieren

zu schreiben. Überprüfen Sie, ob die Datei vorhanden ist:

func CheckFileExist(fileName string) bool {
    _, err := os.Stat(fileName)
    if os.IsNotExist(err) {
        return false
    }
    return true
}
Nach dem Login kopieren

Weitere Golang-Kenntnisse finden Sie in der Spalte Golang-Tutorial auf der chinesischen PHP-Website.

Das obige ist der detaillierte Inhalt vonSo lesen Sie Dateien in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!