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

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

Golang 中的 Bufio 包詳解之 Bufio.Scanner

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

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

bufio.Scanner

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

bufio.Scanner 可以將輸入數據分解為邏輯上的行并返回。Scanner 通過定義一個 Split 函數來將輸入分解為行。結構體定義和對應的方法如下:12o28資訊網——每日最新資訊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 提供的一些主要方法:12o28資訊網——每日最新資訊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 類型的參數,該函數在每次讀取輸入時被調用,用于判斷是否需要將當前數據塊分割成多個小塊。通常用于處理非常大的數據塊,以避免內存溢出等問題。

使用示例

簡單使用示例如下:12o28資訊網——每日最新資訊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())	}}

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

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

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

小結

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

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

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

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

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

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 惠水县| 彰化县| 濉溪县| 改则县| 灵寿县| 天祝| 全州县| 齐河县| 开化县| 肥东县| 聂拉木县| 安远县| 都匀市| 宣城市| 苍溪县| 古交市| 尚志市| 株洲市| 随州市| 桓仁| 碌曲县| 天气| 伊春市| 固镇县| 邹平县| 启东市| 兴化市| 秀山| 卓尼县| 普宁市| 宁化县| 赤峰市| 遂溪县| 昌乐县| 杭锦后旗| 夏邑县| 河西区| 米泉市| 政和县| 融水| 霸州市|