Golang 中的 bufio 包是帶緩沖 I/O 操作的標準庫,之前的幾篇文章詳細講解了 bufio.Reader、bufio.Writer 和 bufio.Scanner 這個幾個結構體的使用方法、特性和使用場景,本文介紹一下 bufio 包中的函數。
介紹常用函數之前,先簡單介紹下另一個結構體類型和一個函數類型:bufio.ReadWriter 和 bufio.SplitFunc,對應的定義如下:
type ReadWriter struct { *Reader *Writer}type SplitFunc func(data []byte, atEOF bool) (advance int, token []byte, err error)
ReadWriter 結構體實現了 io.ReadWriter 接口,SplitFunc 是用來指定自定義分割規則的函數類型,通常結合 bufio.Scanner 使用。
以下幾個函數都是 SplitFunc 類型,通常與 bufio.NewScanner 一起使用。
package mainimport ( "bufio" "fmt" "os" "strings")func main() { // 確定讀取文件的路徑 path := "file.txt" // 打開文件并處理錯誤 file, err := os.Open(path) if err != nil { panic(err) } defer file.Close() // 創建Scanner類型對象 scanner := bufio.NewScanner(file) // 設置分割函數 scanner.Split(bufio.ScanWords) // 創建一個map對象,用于存儲單詞出現的次數 counts := make(map[string]int) // 讀取文件內容并統計單詞出現次數 for scanner.Scan() { word := strings.ToLower(scanner.Text()) counts[word]++ } // 檢查Scanner是否出錯 if err := scanner.Err(); err != nil { panic(err) } // 輸出結果到控制臺 for word, count := range counts { fmt.Printf("%s: %d/n", word, count) } // 讓用戶根據輸入的關鍵字進行篩選 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) } } }}
首先創建了一個 Scanner 類型的對象,指定了 ScanWords 作為分隔函數,然后遍歷文件內容,統計單詞出現的次數并將結果存儲到一個map中,最后讓用戶輸入關鍵字進行篩選,根據關鍵字過濾并輸出結果。
bufio 是一個提供了帶緩沖讀寫操作的包,通過使用 bufio 包提供的類型和方法,可以高效地讀寫數據,特別是當涉及到大量數據的讀寫時,可以大大提高程序的性能。
本文鏈接:http://www.tebozhan.com/showinfo-26-13829-0.htmlGolang 中的 Bufio 包詳解之常用函數
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 基于ArkTS的應用入場動畫