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

當(dāng)前位置:首頁 > 科技  > 軟件

Golang 中的 IO 包詳解:?jiǎn)巫止?jié)操作接口

來源: 責(zé)編: 時(shí)間:2023-08-09 23:02:44 353觀看
導(dǎo)讀io.ByteReadertype ByteReader interface { ReadByte() (byte, error)}定義了一個(gè)基本方法 ReadByte,用于讀取數(shù)據(jù)源中的單個(gè)字節(jié),如果沒有字節(jié)可讀,返回非 nil 的錯(cuò)誤。標(biāo)準(zhǔn)庫中的 bufio.Reader 實(shí)現(xiàn)了該接口,從一個(gè) io.

C7L28資訊網(wǎng)——每日最新資訊28at.com

io.ByteReader

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

定義了一個(gè)基本方法 ReadByte,用于讀取數(shù)據(jù)源中的單個(gè)字節(jié),如果沒有字節(jié)可讀,返回非 nil 的錯(cuò)誤。C7L28資訊網(wǎng)——每日最新資訊28at.com

標(biāo)準(zhǔn)庫中的 bufio.Reader 實(shí)現(xiàn)了該接口,從一個(gè) io.Reader 中讀取并提供帶緩存的讀取方法,簡(jiǎn)單示例如下:C7L28資訊網(wǎng)——每日最新資訊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 接口的擴(kuò)展,提供了一個(gè)額外的方法:UnreadByte,UnreadByte方法讓下一次調(diào)用 ReadByte 時(shí)返回之前調(diào)用 ReadByte 時(shí)返回的同一個(gè)字節(jié)。C7L28資訊網(wǎng)——每日最新資訊28at.com

io.ByteWriter

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

定義了一個(gè)基本方法 ReadByte,用于向數(shù)據(jù)源中寫入單個(gè)字節(jié)的能力,C7L28資訊網(wǎng)——每日最新資訊28at.com

標(biāo)準(zhǔn)庫中的 bufio.Writer 實(shí)現(xiàn)了該接口,從字節(jié)序列中構(gòu)造并提供緩沖輸出,簡(jiǎn)單示例如下:C7L28資訊網(wǎng)——每日最新資訊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 碼點(diǎn)(Rune),定義了一個(gè)基本方法 ReadRune,接受一個(gè)參數(shù)類型為 rune 的指針,并返回讀取的 Rune 以及錯(cuò)誤類型。C7L28資訊網(wǎng)——每日最新資訊28at.com

io.RuneReader 通常與 bufio.Reader 一起使用,用于構(gòu)建高效的文本讀取器。例如如下示例,使用 bufio.Reader 讀取一個(gè)文件并逐行解析其中的 Unicode 碼點(diǎn):C7L28資訊網(wǎng)——每日最新資訊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}

擴(kuò)展了 io.RuneReader 接口,添加了一個(gè)名為 UnreadRune 的方法,用于撤消最近讀取的 Rune,并使下一次讀取的時(shí)候再次返回該 Rune。簡(jiǎn)單示例如下:C7L28資訊網(wǎng)——每日最新資訊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 從控制臺(tái)讀取每一行輸入,然后將每一行轉(zhuǎn)換為一個(gè) strings.Reader,并將其傳遞給 bufio.NewReader 來掃描 Rune。C7L28資訊網(wǎng)——每日最新資訊28at.com

io.StringWriter

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

定義了一個(gè)基本方法 WriteString,用來將數(shù)據(jù)寫入一個(gè)字符串。簡(jiǎn)單示例如下:C7L28資訊網(wǎng)——每日最新資訊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!}

首先創(chuàng)建了一個(gè) strings.Builder,然后使用 io.StringWriter 將 builder 轉(zhuǎn)換為一個(gè) io.Writer,最后使用 builder.String 將最終結(jié)果轉(zhuǎn)換為一個(gè) string。C7L28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-5145-0.htmlGolang 中的 IO 包詳解:?jiǎn)巫止?jié)操作接口

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

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

下一篇: 低碳 Web 實(shí)踐指南

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 略阳县| 仙桃市| 栾川县| 封开县| 顺昌县| 平果县| 灌阳县| 陇西县| 家居| 永昌县| 江华| 潜江市| 鄂尔多斯市| 方城县| 蛟河市| 祁连县| 汉阴县| 江西省| 游戏| 宁陵县| 乐至县| 福鼎市| 改则县| 尚志市| 云龙县| 泗洪县| 邓州市| 临武县| 迭部县| 桦南县| 尤溪县| 陆丰市| 肥城市| 泰安市| 依安县| 和硕县| 千阳县| 黄大仙区| 克什克腾旗| 苍溪县| 定南县|