Go-bufio-库

Godoc bufio 文档

重要类型

type Scanner

1
2
3
type Scanner struct {
// contains filtered or unexported fields
}

type SplitFunc

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

预定义的 SplitFunc

若不指定 SplitFunc, 默认为 ScanLines.

ScanBytes 以一个 byte 为 token

1
func ScanBytes(data []byte, atEOF bool) (advance int, token []byte, err error)

ScanLines 以一行为 token

1
func ScanLines(data []byte, atEOF bool) (advance int, token []byte, err error)

使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

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

func main() {
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
fmt.Println(scanner.Text()) // Println will add back the final '\n'
}
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading standard input:", err)
}
}

ScanRunes 以一个 rune 为 token

1
func ScanRunes(data []byte, atEOF bool) (advance int, token []byte, err error)

ScanWords 以一个 word 为 token

1
func ScanWords(data []byte, atEOF bool) (advance int, token []byte, err error)

NewScanner 获得一个 Scanner 类型指针

1
func NewScanner(r io.Reader) *Scanner

Scan 推动 token 产生

1
func (s *Scanner) Scan() bool

没调用一次会向前产生一个 token, 当没有 token 时返回 false.

Split 设置 SplitFunc

1
func (s *Scanner) Split(split SplitFunc)

默认为 ScanLines

Bytes 以字节形式返回最新 token

1
func (s *Scanner) Bytes() []byte

Text 以字符串形式返回最新 token


Go-bufio-库
http://example.com/2024/02/11/Go-bufio-库/
作者
Jie
发布于
2024年2月11日
许可协议