日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Golang 中的 Bufio 包詳解之 Bufio.Scanner

來源: 責編: 時間:2023-10-10 18:30:57 246觀看
導讀bufio.Scannerbufio.Scanner 是 Golang 中一個用于逐個讀取輸入緩沖區的掃描器,通常與 bufio.Reader 一起使用,bufio.Reader 用于從輸入中讀取數據,而 bufio.Scanner 則用于逐個讀取輸入緩沖區的內容。bufio.Scanner 可

HQ428資訊網——每日最新資訊28at.com

bufio.Scanner

bufio.Scanner 是 Golang 中一個用于逐個讀取輸入緩沖區的掃描器,通常與 bufio.Reader 一起使用,bufio.Reader 用于從輸入中讀取數據,而 bufio.Scanner 則用于逐個讀取輸入緩沖區的內容。HQ428資訊網——每日最新資訊28at.com

bufio.Scanner 可以將輸入數據分解為邏輯上的行并返回。Scanner 通過定義一個 Split 函數來將輸入分解為行。結構體定義和對應的方法如下:HQ428資訊網——每日最新資訊28at.com

type Scanner struct {	r            io.Reader // The reader provided by the client.	split        SplitFunc // The function to split the tokens.	maxTokenSize int       // Maximum size of a token; modified by tests.	token        []byte    // Last token returned by split.	buf          []byte    // Buffer used as argument to split.	start        int       // First non-processed byte in buf.	end          int       // End of data in buf.	err          error     // Sticky error.	empties      int       // Count of successive empty tokens.	scanCalled   bool      // Scan has been called; buffer is in use.	done         bool      // Scan has finished.}

下面是 bufio.Writer 提供的一些主要方法:HQ428資訊網——每日最新資訊28at.com

  • func (s *Scanner) Scan() bool,用于讀取輸入緩沖區中的下一個數據塊,并將其保存在內部的緩沖區中。如果讀取成功,則返回 true;如果已經讀取了所有數據或者發生了錯誤,則返回 false。
  • func (s *Scanner) Text() string,用于獲取內部緩沖區中的文本內容,通常與 Scan() 方法一起使用,用于獲取讀取的數據。
  • func (s *Scanner) Bytes() []byte,用于獲取內部緩沖區中的字節內容,通常與 Scan() 方法一起使用,用于獲取讀取的數據。
  • func (s *Scanner) Err() error,用于獲取在讀取輸入時發生的錯誤信息,如果讀取過程中沒有發生錯誤,則返回 nil;否則,返回一個非 nil 的錯誤對象。
  • func (s *Scanner) Buffer(buf []byte, max int), 用于自定義輸入緩沖區大小,接受一個 []byte 類型的參數,用于指定緩沖區的大小。
  • func (s *Scanner) Split(split SplitFunc),用于指定一個分割函數,將輸入分割成多個數據塊,接受一個 func([]byte) bool 類型的參數,該函數在每次讀取輸入時被調用,用于判斷是否需要將當前數據塊分割成多個小塊。通常用于處理非常大的數據塊,以避免內存溢出等問題。

使用示例

簡單使用示例如下:HQ428資訊網——每日最新資訊28at.com

package mainimport (	"bufio"	"fmt"	"strings")func main() {	input := "路多辛的所思所想/n很值得一看哦!/n"	scanner := bufio.NewScanner(strings.NewReader(input))	// 逐行遍歷	for scanner.Scan() {		fmt.Println(scanner.Text())	}	// 錯誤處理	if err := scanner.Err(); err != nil {		fmt.Println("Error:", err)	}	// 自定義分隔符	scanner = bufio.NewScanner(strings.NewReader("路多辛,的,所思所想"))	scanner.Split(func(data []byte, atEOF bool) (advance int, token []byte, err error) {		// 分隔符為逗號		for i, d := range data {			if d == ',' {				return i + 1, data[:i], nil			}		}		if atEOF && len(data) > 0 {			return len(data), data, nil		}		return 0, nil, nil	})	for scanner.Scan() {		fmt.Println(scanner.Text())	}}

運行看下效果:HQ428資訊網——每日最新資訊28at.com

$ go run main.go路多辛的所思所想很值得一看哦路多辛的所思所想

第一個示例中,使用了默認的分割方式,即按行讀取輸入。第二個示例中,使用自定義分隔符,將輸入的字符串按照逗號進行分隔。HQ428資訊網——每日最新資訊28at.com

小結

bufio.Scanner 在讀取緩沖區時,會將讀取的數據保存在內部緩沖區中。因此,在每次調用 scanner.Scan() 方法時,都會從輸入中讀取一個新的數據塊,并保存在內部緩沖區中。如果需要讀取輸入緩沖區中的所有數據,需要不斷調用 scanner.Scan() 方法,直到返回 false 為止。HQ428資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-12701-0.htmlGolang 中的 Bufio 包詳解之 Bufio.Scanner

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何使用CSS和JavaScript實施暗模式?

下一篇: 面試中如何答好:AQS

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 莆田市| 洞头县| 澄城县| 广丰县| 古蔺县| 永川市| 高淳县| 临朐县| 分宜县| 红桥区| 阳原县| 平乡县| 华坪县| 东至县| 什邡市| 喀喇沁旗| 清远市| 莎车县| 湘阴县| 古交市| 蒙阴县| 八宿县| 迁安市| 遂川县| 华安县| 章丘市| 广灵县| 裕民县| 永年县| 昌都县| 洪雅县| 龙陵县| 岳西县| 沁源县| 加查县| 武城县| 霍城县| 慈利县| 翁牛特旗| 即墨市| 柯坪县|