最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你掌握Go語言中的文件讀取操作

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

os 包 和 bufio 包

Go 標準庫的 os 包,為我們提供很多操作文件的函數,如 Open(name) 打開文件、Create(name) 創(chuàng)建文件等函數,與之對應的是 bufio 包,os 包是直接對磁盤進行操作的,而 bufio 包則是帶有緩沖的操作,不用每次都去操作磁盤。

os.Open 與 os.OpenFile 以及 File.Read

Open(name string) (*File, error)

通過 文件名文件路徑+文件名 的形式打開一個文件,此文件只能用于讀操作,如果文件不存在則返回 PathError 。

  • 參數 name文件名文件路徑+文件名
  • 返回值 *File 為一個 File 結構體的指針類型,通過指針可以對文件進行讀寫等操作。
  • 返回值 error 為打開文件的過程中產生的錯誤。

OpenFile(name string, flag int, perm FileMode) (*File, error)

通過指定 文件名文件路徑+文件名、文件操作模式、文件權限三個參數打開一個文件,之后可對此文件進行讀寫操作。

  • 參數 name文件名文件路徑+文件名
  • 參數 flag 為指定文件操作模式,可選值有 O_RDONLY → 只讀操作、O_WRONLY → 只寫操作、O_RDWR → 讀寫操作、O_APPEND → 寫入時向文件追加數據、O_CREATE → 如果不存在,則創(chuàng)建一個新文件等。
  • 參數 perm 參數表示文件的模式和權限,例如 0666 為讀寫權限。如果對文件權限所對應的數字不了解,可以去學習一下。
  • 返回值 *File 為一個 File 結構體的指針類型,通過指針可以對文件進行讀寫等操作。
  • 返回值 error 為打開文件的過程中產生的錯誤。

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

讀取與 b 等長度的字節(jié),并存儲到 b 里面。

  • 參數 b 為一個切片數組,用于指定讀取長度和存儲字節(jié)數據。
  • 返回值 n 為所讀取字節(jié)的長度。
  • 返回值 error 為讀取字節(jié)的過程中產生的錯誤。

讀取文件操作

import (
	"fmt"
	"os"
)

func main() {
	file, err := os.Open("1.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()
	data := make([]byte, 11)
	count, err := file.Read(data)
	if err != nil {
		return
	}
	fmt.Println("字節(jié)數據:", data)          // [72 101 108 108 111 32 119 111 114 108 100]
	fmt.Println("字符串數據:", string(data)) // Hello world
	fmt.Println("所獲取字節(jié)的長度:", count)     // 11
}

執(zhí)行結果:

字節(jié)數據: [72 101 108 108 111 32 119 111 114 108 100]
字符串數據: Hello world
所獲取字節(jié)的長度: 11

  • 首先通過 Open 函數打開 1.txt 文件,用 file 變量接收,默認為可讀模式;
  • 然后創(chuàng)建一個長度為 11 的字節(jié)切片,接著通過 file 變量的方法 Read 讀取長度為 11 的字節(jié)數據。os.Open("1.txt") 等價于 os.OpenFile("1.txt", os.O_RDONLY, 0)
  • 最后打印讀取到的數據。

bufio.NewReader 和 Reader.ReadString

讀取文件,建議使用 bufio.NewReaderReader.ReadString,減少磁盤的操作。

NewReader(rd io.Reader) *Reader 獲取一個有緩沖區(qū)的 Reader 指針變量,緩沖區(qū)默認大小為 4096 字節(jié)。通過變量可以對數據進行讀操作。

  • 參數 rd 為一個接口,實現這個接口的數據類型變量都可以作為參數,例如上面提到的 File。
  • 返回值 *ReaderReader 結構體的指針,通過指針可以讀取緩沖區(qū)的數據。

ReadString(delim byte) (string, error) 讀取數據,直到第一次遇到分隔符 delim 為止。讀取過程中發(fā)生錯誤會返回 EOF 錯誤信息。

  • 參數 delim 為分隔符,每次讀取時遇到分隔符就會終止。
  • 第一個返回值為所讀取的內容,內容包括分隔符。
  • 第二個返回值為讀取過程中產生的錯誤信息。

讀取文件操作

1.txt 文件的內容為:

Hello world
Hello Golang
Hello Gopher
import (
	"bufio"
	"fmt"
	"io"
	"os"
	"strings"
)

func main() {
	file, err := os.OpenFile("1.txt", os.O_RDONLY, 0)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()
	reader := bufio.NewReader(file)
	for {
		if lineData, err := reader.ReadString('\n'); err != nil {
			if err == io.EOF {
				// 因為是以換行符為分隔符,如果最后一行沒有換行符,那么返回 io.EOF 錯誤時,也是可能讀到數據的,因此判斷一下是否讀到了數據
				if len(lineData) > 0 {
					fmt.Println(lineData)
				}
				break
			}
		} else {
			fmt.Println(strings.TrimRight(lineData, "\n"))
		}
	}
}

執(zhí)行結果:

Hello World
Hello Golang
Hello Gopher

  • 首先通過 OpenFile 函數打開 1.txt 文件,用 file 變量接收,指定為可讀模式;
  • 然后通過 NewReader 函數創(chuàng)建一個緩沖區(qū),將默認長度的字節(jié)讀取到緩沖區(qū)中;
  • 接著通過 Reader 結構體的方法 ReadString,以 \n 為分隔符,按行讀取數據,然后打印數據。
  • 其中有一個注意點就是,因為是以換行符為分隔符,如果最后一行沒有換行符,那么返回 io.EOF 錯誤時,也是可能讀到數據的,因此需要判斷一下是否讀到了數據。

小結

本文先是對 os 包 和 bufio 包進行簡單的介紹,然后介紹 os 包里的 OpenOpenFile 函數以及 File 結構體的方法 Read,通過案例展示它們的使用方式。緊接著引出 bufio 包里的 NewReader 函數和 Reader 結構體的方法 ReadString,讀取文件的操作推薦使用它們,能減少對磁盤的操作,高效讀取數據。

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

相關文章

  • 一文帶你了解Golang中強大的重試機制

    一文帶你了解Golang中強大的重試機制

    在 Go 語言中,處理瞬態(tài)錯誤是常見的挑戰(zhàn),這些錯誤可能會在一段時間后自動恢復,因此,重試機制在這些情況下非常重要,所以本文就來和大家聊聊Golang中強大的重試機制吧
    2025-01-01
  • 使用goland調試遠程代碼的操作步驟

    使用goland調試遠程代碼的操作步驟

    大家都知道如何在goland調試遠程代碼嗎?今天小編給大家分享一篇教程幫助大家學習goland調試遠程代碼的操作步驟,感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • 解決golang 關于全局變量的坑

    解決golang 關于全局變量的坑

    這篇文章主要介紹了解決golang 關于全局變量的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 深入理解Golang的單元測試和性能測試

    深入理解Golang的單元測試和性能測試

    Go語言提供了強大的測試工具,下面這篇文章主要給大家介紹了關于Golang單元測試和性能測試的相關資料,文中通過示例代碼給大家詳細介紹了單元測試和性能測試的相關內容,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • 解密Golang中Request對象的操作

    解密Golang中Request對象的操作

    這篇文章主要和大家深入探討?Golang?中的?Request?對象,并從多個方面介紹其功能、結構和使用方法,文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-05-05
  • golang?gorm模型結構體的定義示例

    golang?gorm模型結構體的定義示例

    這篇文章主要為大家介紹了golang?gorm模型結構體的定義示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • go語言基礎教程之(包、變量和函數)

    go語言基礎教程之(包、變量和函數)

    這篇文章主要介紹了go語言基礎教程之(包、變量和函數)的相關資料,需要的朋友可以參考下
    2023-07-07
  • Go語言map字典用法實例分析

    Go語言map字典用法實例分析

    這篇文章主要介紹了Go語言map字典用法,實例分析了map字典的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 基于Go語言構建RESTful API服務

    基于Go語言構建RESTful API服務

    在實際開發(fā)項目中,你編寫的服務可以被其他服務使用,這樣就組成了微服務的架構;也可以被前端調用,這樣就可以前后端分離。那么,本文主要介紹什么是 RESTful API,以及 Go 語言是如何玩轉 RESTful API 的
    2021-07-07
  • Golang干貨分享之利用AST實現AOP功能

    Golang干貨分享之利用AST實現AOP功能

    本文主要是一個純干貨分享,主要介紹了Golang如何利用AST實現AOP功能,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-04-04

最新評論

瑞安市| 遵义县| 漳浦县| 稷山县| 凤翔县| 文山县| 孟连| 得荣县| 平南县| 夏河县| 磐石市| 翁牛特旗| 额济纳旗| 安乡县| 南溪县| 马鞍山市| 宾阳县| 土默特右旗| 张家口市| 鹤庆县| 景德镇市| 大冶市| 桑植县| 申扎县| 博罗县| 绍兴县| 鹿泉市| 勐海县| 健康| 凯里市| 磐安县| 新田县| 六安市| 邯郸市| 西峡县| 上蔡县| 民乐县| 吉隆县| 英山县| 池州市| 晴隆县|