Go中各種newreader和newbuffer的使用總結(jié)
一、bytes.NewBuffer和bytes.NewReader
func main() { var byteArr []byte buf := bytes.NewBuffer(byteArr) buf.Write([]byte("今天不錯(cuò)")) fmt.Println(buf.String()) }
package main import ( "bytes" "fmt" ) func main() { data := []byte("路多辛的所思所想") reader := bytes.NewReader(data) // 讀取整個(gè)字節(jié)數(shù)組 buf := make([]byte, len(data)) _, err := reader.Read(buf) if err != nil { fmt.Println("Read failed:", err) } fmt.Println("Bytes read:", buf) // 讀取字節(jié)切片的一部分 part := make([]byte, 3) _, err = reader.Read(part) if err != nil { fmt.Println("Read failed:", err) } fmt.Println("Bytes read:", part) // 查找并讀取字節(jié)切片中的某個(gè)字符 offset, err := reader.Seek(6, 0) if err != nil { fmt.Println("Seek failed:", err) } ch, size, err := reader.ReadRune() if err != nil { fmt.Println("ReadRune failed:", err) } fmt.Printf("Read %c with size %d at offset %d\n", ch, size, offset) }
二、strings.NewReader(沒(méi)有newWriter)
r := strings.NewReader("abcdefghijklmn") fmt.Println(r.Len()) // 輸出14 初始時(shí),未讀長(zhǎng)度等于字符串長(zhǎng)度 var buf []byte buf = make([]byte, 5) readLen, err := r.Read(buf) fmt.Println("讀取到的長(zhǎng)度:", readLen) //讀取到的長(zhǎng)度5 if err != nil { fmt.Println("錯(cuò)誤:", err) } fmt.Println(buf) //adcde fmt.Println(r.Len()) //9 讀取到了5個(gè) 剩余未讀是14-5 fmt.Println(r.Size()) //14 字符串的長(zhǎng)度
三、bufio.NewReader和bufio.NewWriter
package main import ( "fmt" "io" "os" ) func main() { fmt.Println("嗨客網(wǎng)(www.haicoder.net)") fileName := "C:/haicoder.txt" file, err := os.Open(fileName) if err != nil{ fmt.Println("Read file err, err =", err) return } defer file.Close() var chunk []byte buf := make([]byte, 1024) for{ n, err := bufio.NewReader(buf) if err != nil && err != io.EOF{ fmt.Println("read buf fail", err) return } //說(shuō)明讀取結(jié)束 if n == 0 { break } //讀取到最終的緩沖區(qū)中 chunk = append(chunk, buf[:n]...) } fmt.Println("File Content =", string(chunk)) }
package main import ( "bufio" "fmt" "io/ioutil" "os" ) func main() { fmt.Println("嗨客網(wǎng)(www.haicoder.net)") var( fileName = "C:/haicoder.txt" content = "Hello HaiCoder" file *os.File err error ) //使用追加模式打開(kāi)文件 file, err = os.OpenFile(fileName, os.O_APPEND, 0666) if err != nil{ fmt.Println("Open file err =", err) return } defer file.Close() writer := bufio.NewWriter(file) //寫(xiě)入文件 n, err := writer.Write([]byte(content)) if err != nil{ fmt.Println("Write file err =", err) return } fmt.Println("Write file success, n =", n) writer.Flush() //讀取文件 fileContent, err := ioutil.ReadFile(fileName) if err != nil{ fmt.Println("Read file err =", err) return } fmt.Println("Read file success =", string(fileContent)) }
總結(jié):
1、使用的newbuffer,緩存區(qū)是用來(lái)存儲(chǔ)內(nèi)容的,并不能確定具體需要的內(nèi)存大小,因此newbuffer的參數(shù)為不固定的[]byte{};
2、使用的newreader,緩存區(qū)應(yīng)該是有數(shù)值的,此時(shí)是用來(lái)讀取其中的內(nèi)容。
到此這篇關(guān)于Go中各種newreader和newbuffer的使用總結(jié)的文章就介紹到這了,更多相關(guān)Go reader buffer內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go標(biāo)準(zhǔn)庫(kù)http與fasthttp服務(wù)端性能對(duì)比場(chǎng)景分析
這篇文章主要介紹了Go標(biāo)準(zhǔn)庫(kù)http與fasthttp服務(wù)端性能比較,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06Go定時(shí)器的三種實(shí)現(xiàn)方式示例詳解
這篇文章主要為大家介紹了Go定時(shí)器的三種實(shí)現(xiàn)方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12使用client go實(shí)現(xiàn)自定義控制器的方法
本文我們來(lái)使用client-go實(shí)現(xiàn)一個(gè)自定義控制器,通過(guò)判斷service的Annotations屬性是否包含ingress/http,如果包含則創(chuàng)建ingress,如果不包含則不創(chuàng)建,對(duì)client go自定義控制器相關(guān)知識(shí)感興趣的朋友一起看看吧2022-05-05詳解如何在Golang中監(jiān)聽(tīng)多個(gè)channel
這篇文章主要為大家詳細(xì)介紹了如何在Golang中實(shí)現(xiàn)監(jiān)聽(tīng)多個(gè)channel,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03瞅一眼就能學(xué)會(huì)的GO并發(fā)編程使用教程
隨著互聯(lián)網(wǎng)的普及,互聯(lián)網(wǎng)用戶(hù)人數(shù)原來(lái)越多,這對(duì)系統(tǒng)的性能帶來(lái)了巨大的挑戰(zhàn)。這個(gè)時(shí)候就需要并發(fā)編程了,本文為大家整理了詳細(xì)的GO并發(fā)編程使用教程,讓你看完就能學(xué)會(huì)2023-02-02輕松入門(mén):使用Golang開(kāi)發(fā)跨平臺(tái)GUI應(yīng)用
Golang是一種強(qiáng)大的編程語(yǔ)言,它的并發(fā)性和高性能使其成為開(kāi)發(fā)GUI桌面應(yīng)用的理想選擇,Golang提供了豐富的標(biāo)準(zhǔn)庫(kù)和第三方庫(kù),可以輕松地創(chuàng)建跨平臺(tái)的GUI應(yīng)用程序,通過(guò)使用Golang的GUI庫(kù),開(kāi)發(fā)人員可以快速構(gòu)建具有豐富用戶(hù)界面和交互功能的應(yīng)用程序,需要的朋友可以參考下2023-10-10關(guān)于golang?struct?中的?slice?無(wú)法原子賦值的問(wèn)題
這篇文章主要介紹了為什么?golang?struct?中的?slice?無(wú)法原子賦值的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01