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(沒有newWriter)
r := strings.NewReader("abcdefghijklmn")
fmt.Println(r.Len()) // 輸出14 初始時(shí),未讀長度等于字符串長度
var buf []byte
buf = make([]byte, 5)
readLen, err := r.Read(buf)
fmt.Println("讀取到的長度:", readLen) //讀取到的長度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 字符串的長度
三、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
}
//說明讀取結(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
)
//使用追加模式打開文件
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)
//寫入文件
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ū)是用來存儲(chǔ)內(nèi)容的,并不能確定具體需要的內(nèi)存大小,因此newbuffer的參數(shù)為不固定的[]byte{};
2、使用的newreader,緩存區(qū)應(yīng)該是有數(shù)值的,此時(shí)是用來讀取其中的內(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)庫http與fasthttp服務(wù)端性能對(duì)比場(chǎng)景分析
這篇文章主要介紹了Go標(biāo)準(zhǔn)庫http與fasthttp服務(wù)端性能比較,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
Go定時(shí)器的三種實(shí)現(xiàn)方式示例詳解
這篇文章主要為大家介紹了Go定時(shí)器的三種實(shí)現(xiàn)方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
使用client go實(shí)現(xiàn)自定義控制器的方法
本文我們來使用client-go實(shí)現(xiàn)一個(gè)自定義控制器,通過判斷service的Annotations屬性是否包含ingress/http,如果包含則創(chuàng)建ingress,如果不包含則不創(chuàng)建,對(duì)client go自定義控制器相關(guān)知識(shí)感興趣的朋友一起看看吧2022-05-05
詳解如何在Golang中監(jiān)聽多個(gè)channel
這篇文章主要為大家詳細(xì)介紹了如何在Golang中實(shí)現(xiàn)監(jiān)聽多個(gè)channel,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03
瞅一眼就能學(xué)會(huì)的GO并發(fā)編程使用教程
隨著互聯(lián)網(wǎng)的普及,互聯(lián)網(wǎng)用戶人數(shù)原來越多,這對(duì)系統(tǒng)的性能帶來了巨大的挑戰(zhàn)。這個(gè)時(shí)候就需要并發(fā)編程了,本文為大家整理了詳細(xì)的GO并發(fā)編程使用教程,讓你看完就能學(xué)會(huì)2023-02-02
輕松入門:使用Golang開發(fā)跨平臺(tái)GUI應(yīng)用
Golang是一種強(qiáng)大的編程語言,它的并發(fā)性和高性能使其成為開發(fā)GUI桌面應(yīng)用的理想選擇,Golang提供了豐富的標(biāo)準(zhǔn)庫和第三方庫,可以輕松地創(chuàng)建跨平臺(tái)的GUI應(yīng)用程序,通過使用Golang的GUI庫,開發(fā)人員可以快速構(gòu)建具有豐富用戶界面和交互功能的應(yīng)用程序,需要的朋友可以參考下2023-10-10
關(guān)于golang?struct?中的?slice?無法原子賦值的問題
這篇文章主要介紹了為什么?golang?struct?中的?slice?無法原子賦值的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01

