亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言讀取文件的方式有哪些

發布時間:2023-05-08 15:30:37 來源:億速云 閱讀:109 作者:iii 欄目:開發技術

這篇文章主要介紹了Go語言讀取文件的方式有哪些的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Go語言讀取文件的方式有哪些文章都會有所收獲,下面我們一起來看看吧。

整個文件讀取

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

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

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

我們在 main.go 函數中寫入如下的內容:

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() 函數的情況:

  • 定義:方法聲明 func ReadFile(filename string) ([]byte, error)

  • 功能:讀取路徑被傳入函數參數的文件,并返回文件的內容。在內部使用 os.ReadFile(fileName) 方法

  • 返回:在一個字節數組中返回文件的內容和錯誤。一個成功的調用將返回 err == nil

內部 ReadFile 函數實現如下:

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

現在,讓我們回到我們的程序:

  • ioutil.ReadFile("readthisfile.txt") 返回一個 byteArray 和一個 err。我們將byteArray 存儲在 "content "變量中,錯誤存儲在 " err "變量中。

  • 然后我們放置了一個 if 條件,如果 err 值不為 nil,我們將使用 log.Fatal() 函數打印錯誤 err 。記住,Fatal() 函數等同于 Print() 函數,然后調用 os.Exit(1)

  • 最后,我們將使用 fmt.Println() 函數打印文件的內容。 我們不能簡單地打印 content 變量,因為它是一個字節數組,我們需要將它轉換為字符串: string(content)

然后新建一個 ilovego.txt 文件,寫入如下內容:

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

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

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

按行讀取

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

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() 打開參數中傳遞的文件。如果在打開文件時遇到任何錯誤,它將返回同樣的錯誤。否則,錯誤將是 nil。

  • 然后,我們使用掃描器來讀取文件,并逐行掃描,直到文件內容結束。

  • 最后,我們要關閉該文件。

執行程序,結果如下:

Go語言讀取文件的方式有哪些

逐個單詞讀取

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

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!

以數據塊的形式讀取文件

一次性讀取整個文件似乎是一種簡單的方法,但有時我們需要從內存管理的角度使我們的程序得到一些優化。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 包實現了十六進制的編碼和解碼。

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語言讀取文件的方式有哪些”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Go語言讀取文件的方式有哪些”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

聂拉木县| 陵川县| 郴州市| 忻城县| 神木县| 阿勒泰市| 北安市| 六安市| 东乌珠穆沁旗| 开封县| 巫山县| 吉安市| 四子王旗| 新竹县| 永昌县| 雷山县| 台前县| 高邮市| 射洪县| 阜城县| 柳江县| 玛多县| 华安县| 银川市| 柳河县| 宁城县| 崇义县| 那坡县| 达日县| 天津市| 松阳县| 济宁市| 常德市| 陆丰市| 上思县| 沅陵县| 南宁市| 井冈山市| 临朐县| 大连市| 安泽县|