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

一文帶你掌握Go語言中文件的寫入操作

 更新時間:2022年12月07日 08:18:59   作者:陳明勇  
這篇文章主要和大家分享一下Go語言中文件的寫入操作,文中的示例代碼講解詳細,對我們學習Go語言有一定的幫助,需要的小伙伴可以參考一下

前言

上篇文章 一文掌握 Go 文件的讀取操作 介紹了如何使用 Go os 包和 bufio 包里的幾個函數和方法,通過案例展示如何讀取文件里的內容。本文接著上篇文章的內容,介紹文件的寫入操作。

File.Write、File.WriteString、File.WriteAt

File.Write(b []byte) (n int, err error)

直接操作磁盤往文件里寫入數據,寫入單位為字節(jié)。

  • b 參數:寫入的數據,類型為字節(jié)切片。
  • 返回值 n:寫入的字節(jié)數。
  • 返回值 err:寫入數據的過程中產生的錯誤。

File.WriteString(s string) (n int, err error)

直接操作磁盤往指定文件里寫入數據,寫入單位為字符串。

  • s 參數:寫入的字符串數據。
  • 返回值 n:寫入的字節(jié)數。
  • 返回值 err:寫入數據的過程中產生的錯誤。

File.WriteAt(b []byte, off int64) (n int, err error)

從指定位置 off 往文件里順序寫入數據,如果某個偏移量上有數據,則會覆蓋。

  • b 參數:寫入的數據,類型為字節(jié)切片。
  • off 參數:偏移量,從此位置開始寫入數據。
  • 返回值 n:寫入的字節(jié)數。
  • 返回值 err:寫入數據的過程中產生的錯誤。

文件寫入操作

import (
    "fmt"
    "os"
)

func main() {
    file, err := os.OpenFile("test.txt", os.O_CREATE, 0)
    if err != nil {
            fmt.Println(err)
            return
    }
    defer file.Close()
    count, err := file.Write([]byte{'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\n'})
    if err != nil {
            return
    }
    fmt.Printf("寫入了 %d 字節(jié)\n", count)
    count, err = file.WriteString("Hello Golang")
    if err != nil {
            return
    }
    fmt.Printf("寫入了長度為 %d 的字符串\n", count)
    count, err = file.WriteAt([]byte{'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x'}, 0)
    if err != nil {
            return
    }
    fmt.Printf("寫入了 %d 字節(jié)\n", count)
}

首先打開 test.txt 文件,指定的模式為 os.O_CREATE,如果文件不存在則會自動創(chuàng)建;

然后通過 Write 方法以字符的形式往文件里寫入 Hello World\n 的內容;

接著通過 WriteString 方法以字符串的形式往文件里寫入 Hello Golang 內容;此時文件里的內容如下所示:

Hello World
Hello Golang

最后通過 WriteAt 方法,指定從偏移量為 0 的位置開始寫入數據 xxxxxxxxxxx,由于 0 以及之后位置都有數據,因此原有數據被覆蓋了。最后文件的內容為:

xxxxxxxxxxx
Hello Golang

File.Seek

File.Seek(offset int64, whence int)

相對于開頭位置或當前位置或末尾位置,將設置當前讀或寫的偏移量設置為 offset。

  • offset 參數:所要設置的偏移量。
  • whence:相對于哪個位置開始設置偏移量的標志,可選值為 0 → 開頭位置,1 → 當前位置,2 → 末尾位置。

應用

import (
    "fmt"
    "os"
)

func main() {
    file, err := os.OpenFile("test.txt", os.O_CREATE, 0)
    if err != nil {
            fmt.Println(err)
            return
    }
    defer file.Close()
    _, err = file.WriteString("G0lang")
    if err != nil {
            return
    }
    _, err = file.Seek(1, 0)
    if err != nil {
            fmt.Println(err)
            return
    }
    _, err = file.Write([]byte{'o'})
    if err != nil {
            fmt.Println(err)
            return
    }
}
  • 打開 test.txt 文件,指定的模式為 os.O_CREATE,如果文件不存在則會自動創(chuàng)建;
  • 使用 WriteString 方法往文件里寫入 G0lang 字符串;
  • 此時發(fā)現第二個字符錯了,0 應該改成 o;此時的偏移量是指向尾部的;使用 Seek 方法將偏移量移到第二個位置,然后寫入字符 o,由于當前位置已有數據 0,因此 o 將會覆蓋 0

bufio.NewWriter、Writer.WriteString、Writer.Flush

如果需要多次執(zhí)行寫入文件的操作,推薦使用 bufio 里的 Writer 結構體去操作,它會開辟一個緩沖區(qū),默認大小為 4096 字節(jié)。在數據沒有被刷入磁盤之前,所寫入的數據都會暫時保存到緩沖區(qū)里。

NewWriter(w io.Writer) *Writer

開辟一個默認值為 4096 字節(jié)的緩沖區(qū),用于暫存寫入文件的數據內容,返回一個 Writer 結構體的指針變量

  • w 參數:類型為 Writer 接口,實現這個接口的數據類型變量都可以作為參數,例如 File。
  • 返回值 *Writer:一個 Writer 結構體的指針變量,通過該變量可以往緩沖區(qū)里寫入數據。

Writer.WriteString(s string) (int, error)

往緩沖區(qū)寫入內容的方法。

  • 參數 s 為寫入的字符串。
  • 第一個返回值為寫入的字節(jié)數。
  • 第二個返回值為寫入數據的過程中產生的錯誤。

Writer.Flush() error

將所有的緩存數據寫入磁盤。

返回值為數據寫入磁盤的過程中產生的錯誤。

文件寫入操作

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    file, err := os.OpenFile("test.txt", os.O_CREATE, 0)
    if err != nil {
            fmt.Println(err)
            return
    }
    defer file.Close()
    writer := bufio.NewWriter(file)
    _, err = writer.WriteString("Hello World\n")
    if err != nil {
            fmt.Println(err)
            return
    }
    _, err = writer.WriteString("Hello Golang\n")
    if err != nil {
            fmt.Println(err)
            return
    }
    _, err = writer.WriteString("Hello Gopher\n")
    if err != nil {
            fmt.Println(err)
            return
    }
    writer.Flush()
}
  • 首先打開 test.txt 文件,指定的模式為 os.O_CREATE,如果文件不存在則會自動創(chuàng)建;
  • 然后使用 NewWriter 函數獲取一個 Writer 結構體的指針變量 writer;
  • 接著通過 writerWriteString 方法將內容保存到緩沖區(qū)里;
  • 最后調用 Flush 方法,將所有的緩存數據寫入磁盤。

小結

本文先是對 File.Write、File.WriteString、File.WriteAt 進行介紹,通過例子演示它們的使用方式;然后介紹 File.Seek,說明了它的用法;最后引出 bufio.NewWriter、Writer.WriteString、Writer.Flush,使用它們代替 File 結構體里的寫入方法,可以不用頻繁操作磁盤,提高寫入效率。

到此這篇關于一文帶你掌握Go語言中文件的寫入操作的文章就介紹到這了,更多相關Go語言文件寫入內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Golang中對json的優(yōu)雅處理方式

    Golang中對json的優(yōu)雅處理方式

    這篇文章主要給大家介紹了關于Golang中對json的優(yōu)雅處理方式,解析JSON在golang中很麻煩,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • Go 1.22對net/http包的路由增強功能詳解

    Go 1.22對net/http包的路由增強功能詳解

    Go 1.22 版本對 net/http 包的路由功能進行了增強,引入了方法匹配(method matching)和通配符(wildcards)兩項新功能,本文將給大家詳細的介紹一下Go 1.22對net/http包的路由增強功能,需要的朋友可以參考下
    2024-02-02
  • Go生成base64圖片驗證碼實例(超詳細工具類)

    Go生成base64圖片驗證碼實例(超詳細工具類)

    這段時間需要使用圖片驗證碼庫,下面這篇文章主要給大家介紹了關于Go生成base64圖片驗證碼的相關資料,文中給出了詳細的實例代碼,需要的朋友可以參考下
    2023-06-06
  • golang gorm 操作mysql及gorm基本用法

    golang gorm 操作mysql及gorm基本用法

    golang 官方的那個操作mysql的有點麻煩所以就使用了gorm,下面就gorm的使用做下簡單介紹,感興趣的朋友跟隨小編一起看看吧
    2018-11-11
  • Golang切片刪除指定元素的三種方法對比

    Golang切片刪除指定元素的三種方法對比

    Go語言并沒有提供用于刪除元素的語法或接口,而是通過利用切片本身的特性來刪除元素—追加元素,這篇文章主要給大家介紹了關于Golang切片刪除指定元素的三種方法,需要的朋友可以參考下
    2022-06-06
  • Golang爬蟲框架colly使用淺析

    Golang爬蟲框架colly使用淺析

    這篇文章主要介紹了Golang爬蟲框架colly的使用,colly是Go實現的比較有名的一款爬蟲框架,而且Go在高并發(fā)和分布式場景的優(yōu)勢也正是爬蟲技術所需要的,感興趣想要詳細了解可以參考下文
    2023-05-05
  • 用Go+Vue.js快速搭建一個Web應用(初級demo)

    用Go+Vue.js快速搭建一個Web應用(初級demo)

    這篇文章主要介紹了用Go+Vue.js快速搭建一個Web應用(初級demo),本文給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友參考下吧
    2017-11-11
  • 總結Go語言中defer的使用和注意要點

    總結Go語言中defer的使用和注意要點

    Go語言中的defer關鍵字實現比較特殊的功能,這篇文章給大家總結了關于Go語言中defer的使用和注意要點,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-09-09
  • Go語言中的基礎數據類型使用實例

    Go語言中的基礎數據類型使用實例

    這篇文章主要為大家介紹了Go中的基礎數據類型使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Go html/template 模板的使用實例詳解

    Go html/template 模板的使用實例詳解

    這篇文章主要介紹了Go html/template 模板的使用實例詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05

最新評論