AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

Golang 中的 IO 包詳解:單字節操作接口

來源: 責編: 時間:2023-08-09 23:02:44 289觀看
導讀io.ByteReadertype ByteReader interface { ReadByte() (byte, error)}定義了一個基本方法 ReadByte,用于讀取數據源中的單個字節,如果沒有字節可讀,返回非 nil 的錯誤。標準庫中的 bufio.Reader 實現了該接口,從一個 io.

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

io.ByteReader

type ByteReader interface {	ReadByte() (byte, error)}

定義了一個基本方法 ReadByte,用于讀取數據源中的單個字節,如果沒有字節可讀,返回非 nil 的錯誤。7Gv28資訊網——每日最新資訊28at.com

標準庫中的 bufio.Reader 實現了該接口,從一個 io.Reader 中讀取并提供帶緩存的讀取方法,簡單示例如下:7Gv28資訊網——每日最新資訊28at.com

package mainimport (	"bufio"	"fmt"	"strings")func main() {	data := "abc123"	reader := bufio.NewReader(strings.NewReader(data))	for {		c, err := reader.ReadByte()		if err != nil {			break		}		fmt.Print(string(c))	}}

io.ByteScanner

type ByteScanner interface {	ByteReader	UnreadByte() error}

是 io.ByteReader 接口的擴展,提供了一個額外的方法:UnreadByte,UnreadByte方法讓下一次調用 ReadByte 時返回之前調用 ReadByte 時返回的同一個字節。7Gv28資訊網——每日最新資訊28at.com

io.ByteWriter

// ByteWriter is the interface that wraps the WriteByte method.type ByteWriter interface {	WriteByte(c byte) error}

定義了一個基本方法 ReadByte,用于向數據源中寫入單個字節的能力,7Gv28資訊網——每日最新資訊28at.com

標準庫中的 bufio.Writer 實現了該接口,從字節序列中構造并提供緩沖輸出,簡單示例如下:7Gv28資訊網——每日最新資訊28at.com

package mainimport (	"bufio"	"bytes"	"fmt")func main() {	buf := new(bytes.Buffer)	writer := bufio.NewWriter(buf)	for _, c := range "abc123" {		err := writer.WriteByte(byte(c))		if err != nil {			panic(err)		}	}	writer.Flush()	fmt.Println(buf.String())}

io.RuneReader

type RuneReader interface {	ReadRune() (r rune, size int, err error)}

用于從字符流中讀取 Unicode 碼點(Rune),定義了一個基本方法 ReadRune,接受一個參數類型為 rune 的指針,并返回讀取的 Rune 以及錯誤類型。7Gv28資訊網——每日最新資訊28at.com

io.RuneReader 通常與 bufio.Reader 一起使用,用于構建高效的文本讀取器。例如如下示例,使用 bufio.Reader 讀取一個文件并逐行解析其中的 Unicode 碼點:7Gv28資訊網——每日最新資訊28at.com

package mainimport (	"bufio"	"fmt"	"io"	"log"	"os")func main() {	file, _ := os.Open("file.txt")	defer file.Close()	reader := bufio.NewReader(file)	for {		r, _, err := reader.ReadRune()		if err != nil {			if err == io.EOF {				break			}			log.Fatal(err)		}		if r == '/n' {			fmt.Println()		} else {			fmt.Print(r)		}	}}

io.RuneScanner

type RuneScanner interface {	RuneReader	UnreadRune() error}

擴展了 io.RuneReader 接口,添加了一個名為 UnreadRune 的方法,用于撤消最近讀取的 Rune,并使下一次讀取的時候再次返回該 Rune。簡單示例如下:7Gv28資訊網——每日最新資訊28at.com

package mainimport (	"bufio"	"fmt"	"io"	"log"	"os"	"strings")func main() {	scanner := bufio.NewScanner(os.Stdin)	for {		if ok := scanner.Scan(); !ok {			break		}		str := scanner.Text()		reader := strings.NewReader(str)		for {			runeScanner := bufio.NewReader(reader)			r, _, err := runeScanner.ReadRune()			if err != nil {				if err == io.EOF {					break				}				log.Fatal(err)			}			fmt.Printf("%#U/n", r)		}	}}

使用 bufio.Scanner 從控制臺讀取每一行輸入,然后將每一行轉換為一個 strings.Reader,并將其傳遞給 bufio.NewReader 來掃描 Rune。7Gv28資訊網——每日最新資訊28at.com

io.StringWriter

// StringWriter is the interface that wraps the WriteString method.type StringWriter interface {	WriteString(s string) (n int, err error)}

定義了一個基本方法 WriteString,用來將數據寫入一個字符串。簡單示例如下:7Gv28資訊網——每日最新資訊28at.com

package mainimport (	"fmt"	"io"	"strings")func main() {	var builder strings.Builder	writer := io.StringWriter(&builder)	writer.WriteString("Hello, ")	writer.WriteString("World!")	result := builder.String()	fmt.Println(result) // 輸出:Hello, World!}

首先創建了一個 strings.Builder,然后使用 io.StringWriter 將 builder 轉換為一個 io.Writer,最后使用 builder.String 將最終結果轉換為一個 string。7Gv28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-5145-0.htmlGolang 中的 IO 包詳解:單字節操作接口

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

上一篇: 淺析 Parcel 的 Rust 打包算法 Demo

下一篇: 低碳 Web 實踐指南

標簽:
  • 熱門焦點
Top