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

Go語言讀取文件的四種方式

 更新時間:2023年04月12日 08:56:57   作者:宇宙之一粟  
本文主要介紹了Go語言讀取文件的四種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

這篇文章將討論如何在 Golang 中讀取文件。我們將使用以下包來處理這些文件。

  • os 包提供了一個獨立于平臺的接口來執(zhí)行操作級操作。
  • IOutil 軟件包提供了易于使用的實用程序函數(shù)來處理文件,而無需了解太多內(nèi)部實現(xiàn)。
  • bufio 包實現(xiàn)了緩沖 IO,這有助于我們提高輸入和輸出操作的性能和吞吐量。
  • log 包實現(xiàn)一個簡單的日志記錄包。我們將在整個程序中使用它。我們將在程序中使用日志包的 Fatal() 函數(shù)。

整個文件讀取

我們可以很容易地一次性讀取整個文件并將其存儲在一個變量中。但請記住,我們不應該對大文件這樣做。我們將使用ioutil.ReadFile() 函數(shù)來讀取文件并將文件的內(nèi)容存儲在一個變量中。

首先,讓我們在我們程序所在的同一目錄下存儲一個文件。因此,我們的文件夾結構將是下面這樣的。

___ 
| 
|_ _ _ _ ilovego.txt | 
|_ _ _ _ main.go

我們在 main.go 函數(shù)中寫入如下的內(nèi)容:

package main

import (
	"fmt"
	"io/ioutil"
	"log"
)

func main() {

	content, err := ioutil.ReadFile("ilovego.txt")

	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(string(content))
}

但首先,讓我們討論一下 ReadFile() 函數(shù)的情況:

  • 定義:方法聲明 func ReadFile(filename string) ([]byte, error)
  • 功能:讀取路徑被傳入函數(shù)參數(shù)的文件,并返回文件的內(nèi)容。在內(nèi)部使用 os.ReadFile(fileName) 方法
  • 返回:在一個字節(jié)數(shù)組中返回文件的內(nèi)容和錯誤。一個成功的調用將返回 err == nil

內(nèi)部 ReadFile 函數(shù)實現(xiàn)如下:

func ReadFile(filename string) ([]byte, error) {
    return os.ReadFile(filename)
}

現(xiàn)在,讓我們回到我們的程序:

  • ioutil.ReadFile("readthisfile.txt") 返回一個 byteArray 和一個 err。我們將byteArray 存儲在 "content "變量中,錯誤存儲在 " err "變量中。
  • 然后我們放置了一個 if 條件,如果 err 值不為 nil,我們將使用 log.Fatal() 函數(shù)打印錯誤 err 。記住,Fatal() 函數(shù)等同于 Print() 函數(shù),然后調用 os.Exit(1) 。
  • 最后,我們將使用 fmt.Println() 函數(shù)打印文件的內(nèi)容。 我們不能簡單地打印 content 變量,因為它是一個字節(jié)數(shù)組,我們需要將它轉換為字符串: string(content)

然后新建一個 ilovego.txt 文件,寫入如下內(nèi)容:

I Love Golang,
This is One of the Best Languages on the World!

最后,執(zhí)行上述代碼,可以看到如下輸出:

$ go run main.go
I Love Golang, 
This is One of the Best Languages on the World!

按行讀取

Scanner 掃描器提供了一個方便的接口來讀取數(shù)據(jù),比如一個由新行分隔的文本行組成的文件。它通過標記來讀取數(shù)據(jù);Split 函數(shù)定義了標記。默認情況下,該函數(shù)將數(shù)據(jù)分成幾行,并剝離了行端。

package main

import (
	"fmt"
	// "io/ioutil"
	"bufio"
	"log"
	"os"
)

func main() {

	// opening the file using Open function
	f, err := os.Open("ilovego.txt")

	if err != nil {
		log.Fatal(err)
	}

	defer f.Close()

	// create a scanner for the file
	scanner := bufio.NewScanner(f)

	// loop through the scanner until it return fasle
	for scanner.Scan() {

		fmt.Println(scanner.Text())
	}

	if err := scanner.Err(); err != nil {
		log.Fatal(err)
	}
}

  • os.Open() 打開參數(shù)中傳遞的文件。如果在打開文件時遇到任何錯誤,它將返回同樣的錯誤。否則,錯誤將是 nil。
  • 然后,我們使用掃描器來讀取文件,并逐行掃描,直到文件內(nèi)容結束。
  • 最后,我們要關閉該文件。

執(zhí)行程序,結果如下:

逐個單詞讀取

我們還可以通過逐個單詞來讀取文件:

package main

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

func main() {

	f, err := os.Open("ilovego.txt")

	if err != nil {
		fmt.Println(err)
	}

	defer f.Close()

	scanner := bufio.NewScanner(f)
	scanner.Split(bufio.ScanWords)

	for scanner.Scan() {

		fmt.Println(scanner.Text())
	}

	if err := scanner.Err(); err != nil {
		fmt.Println(err)
	}
}

運行代碼:

$ go run main.go
I
Love
Golang,
This
is
One
of
the
Best
Languages
on
the
World!

以數(shù)據(jù)塊的形式讀取文件

一次性讀取整個文件似乎是一種簡單的方法,但有時我們需要從內(nèi)存管理的角度使我們的程序得到一些優(yōu)化。Golang 提供了一種分塊讀取文件的方法,而不是整個或甚至逐行讀取。因為如果一行的大小太大,逐行讀取也可能是低效的。

package main

import (
	"bufio"
	"fmt"
	"io"
	"log"
	"os"
)

func main() {

	f, err := os.Open("ilovego.txt")

	if err != nil {
		log.Fatal(err)
	}

	defer f.Close()

	reader := bufio.NewReader(f)
	buf := make([]byte, 16)

	for {
                // reading a file upto buffer
		n, err := reader.Read(buf)

		if err != nil {

			if err != io.EOF {

				log.Fatal(err)
			}

			break
		}

		fmt.Print(string(buf[0:n]))
	}

	fmt.Println()
}

二進制讀取

hex 包實現(xiàn)了十六進制的編碼和解碼。

package main

import (
	"bufio"
	"encoding/hex"
	"fmt"
	"io"
	"log"
	"os"
)

func main() {

	f, err := os.Open("sid.jpg")

	if err != nil {
		log.Fatal(err)
	}

	defer f.Close()

	reader := bufio.NewReader(f)
	buf := make([]byte, 256)

	for {
		_, err := reader.Read(buf)

		if err != nil {
			if err != io.EOF {
				fmt.Println(err)
			}
			break
		}

		fmt.Printf("%s", hex.Dump(buf))
	}
}

總結

本文介紹了 Go 語言讀取文件的幾種方式,ioutil.ReadFile 函數(shù)將整個文件讀成一個字符串。這個函數(shù)很方便,但不應該用于非常大的文件。

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

相關文章

  • Go語言編譯時為exe添加圖標和屬性信息的方法

    Go語言編譯時為exe添加圖標和屬性信息的方法

    在使用Go語言開發(fā)應用程序時,有個非常方便的地方就是編譯得到的可執(zhí)行文件可以不依賴任何動態(tài)鏈接庫、并且不需要任何運行環(huán)境即可運行,本文給大家介紹Go編譯時為exe添加圖標和屬性信息的方法,需要的朋友可以參考下
    2023-09-09
  • CentOS7使用yum安裝Golang的超詳細步驟

    CentOS7使用yum安裝Golang的超詳細步驟

    CentOS默認并沒有安裝golang運行環(huán)境,下面這篇文章主要給大家介紹了關于CentOS7使用yum安裝Golang的超詳細步驟,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • golang實現(xiàn)讀取excel數(shù)據(jù)并導入數(shù)據(jù)庫

    golang實現(xiàn)讀取excel數(shù)據(jù)并導入數(shù)據(jù)庫

    Go 語言是一門適合用于編寫高效且并發(fā)的 Web 應用程序的編程語言,同時也可以使用它進行數(shù)據(jù)處理和分析,本文主要介紹了如何通過go語言實現(xiàn)讀取excel數(shù)據(jù)并導入數(shù)據(jù)庫,感興趣的小伙伴可以了解下
    2025-04-04
  • Golang如何編寫內(nèi)存高效及CPU調優(yōu)的Go結構體

    Golang如何編寫內(nèi)存高效及CPU調優(yōu)的Go結構體

    這篇文章主要介紹了Golang如何編寫內(nèi)存高效及CPU調優(yōu)的Go結構體,結構體是包含多個字段的集合類型,用于將數(shù)據(jù)組合為記錄
    2022-07-07
  • Golang中Channel實戰(zhàn)技巧與一些說明

    Golang中Channel實戰(zhàn)技巧與一些說明

    channel是Go語言內(nèi)建的first-class類型,也是Go語言與眾不同的特性之一,下面這篇文章主要給大家介紹了關于Golang中Channel實戰(zhàn)技巧與一些說明的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • Go語言并發(fā)之context標準庫的使用詳解

    Go語言并發(fā)之context標準庫的使用詳解

    Context的出現(xiàn)是為了解決在大型應用程序中的并發(fā)環(huán)境下,協(xié)調和管理多個goroutine之間的通信、超時和取消操作的問題,本文就來和大家簡單聊聊它的具體用法,希望對大家有所幫助
    2023-06-06
  • Golang易錯知識點匯總

    Golang易錯知識點匯總

    這篇文章匯總了在開發(fā)和刷面試題過程中遇到的Golang容易搞錯的知識點,關鍵部分也都為大家寫了代碼示例,感興趣的小伙伴可以了解一下
    2022-09-09
  • golang 實現(xiàn)每隔幾分鐘執(zhí)行一個函數(shù)

    golang 實現(xiàn)每隔幾分鐘執(zhí)行一個函數(shù)

    這篇文章主要介紹了golang 實現(xiàn)每隔幾分鐘執(zhí)行一個函數(shù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言實現(xiàn)關閉http請求的方式總結

    Go語言實現(xiàn)關閉http請求的方式總結

    面試的時候問到如何關閉http請求,一般人脫口而出的是關閉response.body,這是錯誤的。本文為大家整理了三個正確關閉http請求的方法,希望對大家有所幫助
    2023-02-02
  • Golang并發(fā)編程深入分析

    Golang并發(fā)編程深入分析

    golang中的并發(fā),是函數(shù)相互獨立運行的能力,goroutines是并發(fā)運行的函數(shù)。golang提供了goroutines作為并發(fā)處理的一種方式
    2022-11-11

最新評論

徐汇区| 重庆市| 阳东县| 逊克县| 若尔盖县| 历史| 郑州市| 苍南县| 南康市| 北宁市| 西乡县| 虹口区| 醴陵市| 兰州市| 汾阳市| 黑河市| 左权县| 宁阳县| 紫阳县| 融水| 铁岭市| 泰兴市| 中阳县| 芜湖县| 九江县| 湖口县| 湾仔区| 陇川县| 白玉县| 绥棱县| 小金县| 伊金霍洛旗| 重庆市| 友谊县| 边坝县| 徐汇区| 陇川县| 逊克县| 济源市| 泊头市| 梅州市|