1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      Go語言如何讀取文件

      這篇文章主要講解了“Go語言如何讀取文件”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Go語言如何讀取文件”吧!

      創(chuàng)新互聯(lián)是一家從事企業(yè)網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、行業(yè)門戶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)制作的專業(yè)的建站公司,擁有經(jīng)驗(yàn)豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁設(shè)計(jì)人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實(shí)力,在網(wǎng)站建設(shè)領(lǐng)域樹立了自己獨(dú)特的設(shè)計(jì)風(fēng)格。自公司成立以來曾獨(dú)立設(shè)計(jì)制作的站點(diǎn)近1000家。

      我們將使用以下包來處理這些文件。

      • os 包提供了一個(gè)獨(dú)立于平臺(tái)的接口來執(zhí)行操作級(jí)操作。

      • IOutil 軟件包提供了易于使用的實(shí)用程序函數(shù)來處理文件,而無需了解太多內(nèi)部實(shí)現(xiàn)。

      • bufio 包實(shí)現(xiàn)了緩沖 IO,這有助于我們提高輸入和輸出操作的性能和吞吐量。

      • log 包實(shí)現(xiàn)一個(gè)簡單的日志記錄包。我們將在整個(gè)程序中使用它。我們將在程序中使用日志包的 Fatal() 函數(shù)。

      整個(gè)文件讀取

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

      首先,讓我們?cè)谖覀兂绦蛩诘耐荒夸浵麓鎯?chǔ)一個(gè)文件。因此,我們的文件夾結(jié)構(gòu)將是下面這樣的。

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

      我們?cè)?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) 方法

      • 返回:在一個(gè)字節(jié)數(shù)組中返回文件的內(nèi)容和錯(cuò)誤。一個(gè)成功的調(diào)用將返回 err == nil

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

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

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

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

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

      • 最后,我們將使用 fmt.Println() 函數(shù)打印文件的內(nèi)容。 我們不能簡單地打印 content 變量,因?yàn)樗且粋€(gè)字節(jié)數(shù)組,我們需要將它轉(zhuǎn)換為字符串: string(content)

      然后新建一個(gè) 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 掃描器提供了一個(gè)方便的接口來讀取數(shù)據(jù),比如一個(gè)由新行分隔的文本行組成的文件。它通過標(biāo)記來讀取數(shù)據(jù);Split 函數(shù)定義了標(biāo)記。默認(rèn)情況下,該函數(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ù)中傳遞的文件。如果在打開文件時(shí)遇到任何錯(cuò)誤,它將返回同樣的錯(cuò)誤。否則,錯(cuò)誤將是 nil。

      • 然后,我們使用掃描器來讀取文件,并逐行掃描,直到文件內(nèi)容結(jié)束。

      • 最后,我們要關(guān)閉該文件。

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

      Go語言如何讀取文件

      逐個(gè)單詞讀取

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

      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)
      	}
      }

      運(yùn)行代碼:

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

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

      一次性讀取整個(gè)文件似乎是一種簡單的方法,但有時(shí)我們需要從內(nèi)存管理的角度使我們的程序得到一些優(yōu)化。Golang 提供了一種分塊讀取文件的方法,而不是整個(gè)或甚至逐行讀取。因?yàn)槿绻恍械拇笮√螅鹦凶x取也可能是低效的。

      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()
      }

      二進(jìn)制讀取

      hex 包實(shí)現(xiàn)了十六進(jì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語言如何讀取文件”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Go語言如何讀取文件這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


      本文題目:Go語言如何讀取文件
      本文網(wǎng)址:http://www.ef60e0e.cn/article/ihehjp.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        板桥市| 潜江市| 泗洪县| 含山县| 阜康市| 苗栗县| 寿光市| 阿鲁科尔沁旗| 调兵山市| 尉犁县| 贵定县| 嫩江县| 启东市| 博白县| 林州市| 哈尔滨市| 扬州市| 南康市| 抚宁县| 介休市| 社会| 玉林市| 桃园市| 屯门区| 赤壁市| 潞城市| 武川县| 九寨沟县| 文水县| 嵊州市| 叙永县| 封丘县| 武宣县| 三都| 荥阳市| 阜平县| 武夷山市| 博野县| 德保县| 东兰县| 株洲市|