国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Golang 中的 bufio 包詳解(五):常用函數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了Golang 中的 bufio 包詳解(五):常用函數(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Golang 中的 bufio 包是帶緩沖 I/O 操作的標(biāo)準(zhǔn)庫(kù),之前的幾篇文章詳細(xì)講解了 bufio.Reader、bufio.Writer 和 bufio.Scanner 這個(gè)幾個(gè)結(jié)構(gòu)體的使用方法、特性和使用場(chǎng)景,本文介紹一下 bufio 包中的函數(shù)。

介紹常用函數(shù)之前,先簡(jiǎn)單介紹下另一個(gè)結(jié)構(gòu)體類型和一個(gè)函數(shù)類型:bufio.ReadWriter 和?bufio.SplitFunc,對(duì)應(yīng)的定義如下:

type ReadWriter struct {
	*Reader
	*Writer
}

type SplitFunc func(data []byte, atEOF bool) (advance int, token []byte, err error)

ReadWriter 結(jié)構(gòu)體實(shí)現(xiàn)了?io.ReadWriter 接口,SplitFunc?是用來指定自定義分割規(guī)則的函數(shù)類型,通常結(jié)合 bufio.Scanner 使用。

創(chuàng)建對(duì)象函數(shù)

  • func NewReader(rd io.Reader) *Reader,創(chuàng)建一個(gè)帶緩沖的 Reader 對(duì)象。
  • func NewWriter(w io.Writer) *Writer,創(chuàng)建一個(gè)帶緩沖的 Writer 對(duì)象。
  • func NewReadWriter(r *Reader, w *Writer) *ReadWriter,創(chuàng)建一個(gè)帶緩沖的 ReadWriter 對(duì)象。
  • func NewReaderSize(rd io.Reader, size int) *Reader,創(chuàng)建一個(gè)帶緩沖的?Reader 對(duì)象,使用 size 指定緩沖區(qū)的最小值。
  • func NewWriterSize(w io.Writer, size int) *Writer,創(chuàng)建一個(gè)帶緩沖的 Writer 對(duì)象,使用 size 指定緩沖區(qū)的最小值。
  • func NewScanner(r io.Reader) *Scanner,創(chuàng)建一個(gè)帶緩沖的 Scanner 對(duì)象。

SplitFunc 類型函數(shù)

以下幾個(gè)函數(shù)都是 SplitFunc 類型,通常與 bufio.NewScanner 一起使用。

  • func ScanLines(data []byte, atEOF bool) (advance int, token []byte, err error),用于逐行讀取輸入流中的數(shù)據(jù)。
  • func ScanBytes(data []byte, atEOF bool) (advance int, token []byte, err error),用于逐個(gè)字節(jié)讀取輸入流中的數(shù)據(jù)。
  • func ScanRunes(data []byte, atEOF bool) (advance int, token []byte, err error),用于逐個(gè) unicode 編碼讀取輸入流中的數(shù)據(jù)。
  • func ScanWords(data []byte, atEOF bool) (advance int, token []byte, err error),用于逐個(gè)單詞(空格分割)讀取輸入流中的數(shù)據(jù)。

使用示例

package main

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

func main() {
	// 確定讀取文件的路徑
	path := "file.txt"

	// 打開文件并處理錯(cuò)誤
	file, err := os.Open(path)
	if err != nil {
		panic(err)
	}
	defer file.Close()

	// 創(chuàng)建Scanner類型對(duì)象
	scanner := bufio.NewScanner(file)

	// 設(shè)置分割函數(shù)
	scanner.Split(bufio.ScanWords)

	// 創(chuàng)建一個(gè)map對(duì)象,用于存儲(chǔ)單詞出現(xiàn)的次數(shù)
	counts := make(map[string]int)

	// 讀取文件內(nèi)容并統(tǒng)計(jì)單詞出現(xiàn)次數(shù)
	for scanner.Scan() {
		word := strings.ToLower(scanner.Text())
		counts[word]++
	}

	// 檢查Scanner是否出錯(cuò)
	if err := scanner.Err(); err != nil {
		panic(err)
	}

	// 輸出結(jié)果到控制臺(tái)
	for word, count := range counts {
		fmt.Printf("%s: %d\n", word, count)
	}

	// 讓用戶根據(jù)輸入的關(guān)鍵字進(jìn)行篩選
	fmt.Print("Enter keyword to filter results: ")
	reader := bufio.NewReader(os.Stdin)
	input, _ := reader.ReadString('\n')
	keyword := strings.TrimSpace(input)

	if keyword != "" {
		for word, count := range counts {
			if strings.Contains(word, keyword) {
				fmt.Printf("%s: %d\n", word, count)
			}
		}
	}
}

首先創(chuàng)建了一個(gè) Scanner 類型的對(duì)象,指定了 ScanWords 作為分隔函數(shù),然后遍歷文件內(nèi)容,統(tǒng)計(jì)單詞出現(xiàn)的次數(shù)并將結(jié)果存儲(chǔ)到一個(gè)map中,最后讓用戶輸入關(guān)鍵字進(jìn)行篩選,根據(jù)關(guān)鍵字過濾并輸出結(jié)果。

小結(jié)

bufio 是一個(gè)提供了帶緩沖讀寫操作的包,通過使用 bufio 包提供的類型和方法,可以高效地讀寫數(shù)據(jù),特別是當(dāng)涉及到大量數(shù)據(jù)的讀寫時(shí),可以大大提高程序的性能。文章來源地址http://www.zghlxwxcb.cn/news/detail-500425.html

到了這里,關(guān)于Golang 中的 bufio 包詳解(五):常用函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • golang strings 常用函數(shù)

    官網(wǎng) https://pkg.go.dev/strings 這里介紹最常用的函數(shù) 1、Fields 以空格為字段分割符,返回[]string 2、Contains 是否包含子串,返回bool 3、Split ,以子串分割,返回[]string 4、ReplaceAll 替換 5、其他 -------------end

    2024年02月13日
    瀏覽(18)
  • Golang 中的接口詳解

    什么是接口:接口(interface)定義了一個(gè)對(duì)象的行為規(guī)范,只定義規(guī)范不實(shí)現(xiàn),由具體的對(duì)象來實(shí)現(xiàn)規(guī)范的細(xì)節(jié)。 在Go語言中接口(interface)是一種類型,一種抽象的類型。 interface是一組method的集合,是duck-type programming的一種體現(xiàn)。 接口做的事情就像是定義一個(gè)協(xié)議(規(guī)則

    2024年02月13日
    瀏覽(28)
  • Golang 中的 map 詳解

    Golang 中的 map 詳解

    1、map 的定義 ??在計(jì)算機(jī)科學(xué)里,被稱為相關(guān)數(shù)組、map、符號(hào)表或者字典,是由一組 key, value 對(duì)組成的抽象數(shù)據(jù)結(jié)構(gòu),并且同一個(gè) key 只會(huì)出現(xiàn)一次。 ??兩個(gè)關(guān)鍵點(diǎn):map 是由 key-value 對(duì)組成的;key 只會(huì)出現(xiàn)一次。 ??map 的設(shè)計(jì)也被稱為 “The dictionary problem(字典問題)

    2024年02月14日
    瀏覽(24)
  • Golang 中的信號(hào)(Signal)機(jī)制詳解

    目錄 信號(hào)基礎(chǔ)概念 Golang 對(duì)信號(hào)的處理 信號(hào)處理的使用場(chǎng)景和使用示例 信號(hào)的局限性 Go 中的特殊信號(hào)處理 小結(jié) Signal 是一種操作系統(tǒng)級(jí)別的事件通知機(jī)制,進(jìn)程可以響應(yīng)特定的系統(tǒng)信號(hào)。這些信號(hào)用于指示進(jìn)程執(zhí)行特定的操作,如程序終止、掛起、恢復(fù)等。Golang 的標(biāo)準(zhǔn)庫(kù)

    2024年01月16日
    瀏覽(31)
  • Golang 中的 io 包詳解(二):組合接口

    Golang 中,接口可以通過嵌入多個(gè)其他接口組成組合接口。組合接口表示的是子接口的集合,具有所有子接口的方法,可以通過組合多個(gè)不同的接口組成一個(gè)更強(qiáng)大的抽象。本文主要介紹下 io 包中的組合接口。 是對(duì)Reader和Writer接口的組合,聚合了基本的讀寫操作。簡(jiǎn)單示例如

    2024年02月08日
    瀏覽(18)
  • Golang 中的 strings 包詳解(二):strings.Reader

    strings.Reader 是一個(gè)實(shí)現(xiàn)了 io.Reader、io.Writer、io.ByteReader、io.ByteScanner、io.RuneReader 、io.RuneScanner,、io.Seeker?和?io.WriterTo?接口的結(jié)構(gòu)體,用于從字符串中高效讀取數(shù)據(jù)。strings.Reader 可以將一個(gè)字符串包裝成一個(gè)可讀流,方便地將字符串中的數(shù)據(jù)讀取到應(yīng)用程序中。結(jié)構(gòu)體定義和

    2024年02月09日
    瀏覽(15)
  • Golang 中的 io 包詳解(五):結(jié)構(gòu)體類型介紹

    實(shí)現(xiàn)了 io.Reader 接口,并且進(jìn)行了功能擴(kuò)展。R 表示 io.Reader 對(duì)象,N 表示最多允許讀取的字節(jié)數(shù)。簡(jiǎn)單示例如下所示: 當(dāng)讀取的字節(jié)數(shù)超過限制時(shí),LimitedReader 會(huì)自動(dòng)終止讀取并返回一個(gè) io.EOF 錯(cuò)誤,表示已經(jīng)達(dá)到了總字節(jié)數(shù)的限制。 實(shí)現(xiàn)了 io.Reader、io.ReaderAt 和 io.Seeker 接口

    2024年02月08日
    瀏覽(21)
  • Golang 中的 time 包詳解(一):time.Time

    在日常開發(fā)過程中,會(huì)頻繁遇到對(duì)時(shí)間進(jìn)行操作的場(chǎng)景,使用 Golang 中的 time 包可以很方便地實(shí)現(xiàn)對(duì)時(shí)間的相關(guān)操作。接下來的幾篇文章會(huì)詳細(xì)講解 time 包,本文先講解一下 time 包中的結(jié)構(gòu)體 time.Time。 time.Time 類型用來表示一個(gè)具體的時(shí)間點(diǎn),可以精確到納秒。結(jié)構(gòu)體定義和

    2024年02月15日
    瀏覽(20)
  • Golang 中的 bytes 包詳解(二):bytes.Reader

    Golang 中的 bytes 包是其中一個(gè) IO 操作標(biāo)準(zhǔn)庫(kù),實(shí)現(xiàn)了對(duì)字節(jié)切片([]byte)的操作,提供了類似于 strings 包的功能。本文先講解一下 bytes 包中的結(jié)構(gòu)體 bytes.Reader。 bytes.Reader 實(shí)現(xiàn)了 io.Reader、io.ReaderAt、io.WriterTo、io.Seeker、io.ByteScanner 和 io.RuneScanner接口,提供了從字節(jié)切片中讀取

    2024年02月12日
    瀏覽(15)
  • Golang 中的 strings 包詳解(一):strings.Builder

    strings.Builder 是 Golang? 中的一個(gè)用于高效構(gòu)建字符串的類型,使用了一個(gè)循環(huán)緩沖區(qū)來存儲(chǔ)字符數(shù)據(jù),避免了頻繁的內(nèi)存分配和拷貝操作,尤其適用于頻繁拼接字符串的場(chǎng)景。結(jié)構(gòu)體定義和對(duì)應(yīng)的方法如下: 其中比較常用的方法有: Reset() :重置 Builder 中的字符串內(nèi)容,使得

    2024年02月09日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包