婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > GO語言的IO方法實例小結

GO語言的IO方法實例小結

熱門標簽:騰訊外呼系統價格 ?兓? 成都呼叫中心外呼系統平臺 谷歌便利店地圖標注 百度地圖標注搜索關鍵詞 電梯外呼訪客系統 浙江人工智能外呼管理系統 電銷機器人可以補救房產中介嗎 最短的地圖標注

type PipeWriter

復制代碼 代碼如下:

type PipeWriter struct {
    // contains filtered or unexported fields
}

(1)func (w *PipeWriter) Close() error關閉管道,關閉時正在進行的Read操作將返回EOF,若管道內仍有未讀取的數據,后續仍可正常讀取
復制代碼 代碼如下:

import (
 "fmt"
 "io"
)

func main() {
 r, w := io.Pipe()
 go w.Write([]byte("hello word"))

 data := make([]byte, 10)
 n, err := r.Read(data)
 w.Close()
 if err == io.EOF {
  fmt.Println("executing read return EOF")
  fmt.Println("executing read reads number", n)
 }
 n, _ = r.Read(data)
 fmt.Println(string(data))          //hello word
 fmt.Println("next read number", n) //next read number 0
}


(2)func (w *PipeWriter) CloseWithError(err error) error這個函數和read里邊的CloseWithError是大同小異的,關閉管道,關閉時正在進行的Read操作將返回參數傳入的異常,若管道內仍有未讀取的數據,后續仍可正常讀取
復制代碼 代碼如下:

import (
 "errors"
 "fmt"
 "io"
)

func main() {
 r, w := io.Pipe()
 go w.Write([]byte("hello widuu"))
 newerr := errors.New("your daye 突然關閉了")
 w.CloseWithError(newerr)
 data := make([]byte, 10)
 _, err := r.Read(data)
 if err != nil {
  fmt.Println(err) //your daye 突然關閉了
 }
}


(3)func (w *PipeWriter) Write(data []byte) (n int, err error)終于來打write了,這個是把字節切片寫入管道,返回的是寫入字節數和error,前邊用到的太多了,隨便哪一個吧
復制代碼 代碼如下:

import (
 "fmt"
 "io"
)

func main() {
 r, w := io.Pipe()
 go w.Write([]byte("hello widuu")) //寫入的是[]byte,注意官方文檔寫的是,寫入管道阻塞,一直到所有數據的讀取結束
 data := make([]byte, 11)
 n, _ := r.Read(data)
 fmt.Println(string(data))     //hello widuu
 fmt.Println("read number", n) //read number 10
}


type Reader

復制代碼 代碼如下:

type Reader interface {
    Read(p []byte) (n int, err error)
}

(1)func LimitReader(r Reader, n int64) Reader,我們之前就說了Reader這個結構,其實這就是對Reader的一次封裝,限定了它讀取字節數,其實他實現的就是io.LimitedReader{}這個結構
復制代碼 代碼如下:

import (
 "fmt"
 "io"
 "os"
 "reflect"
)

func main() {
 f, _ := os.Open("test.txt")
 defer f.Close()
 reader := io.LimitReader(f, 5)
 p := make([]byte, 5)
 fmt.Println(reflect.TypeOf(reader)) //*io.LimitedReader
 var total int
 for {
  n, err := reader.Read(p)
  if err == io.EOF {
   fmt.Println("read value", string(p[:total])) //read value hello
   fmt.Println(total)                           //5
   break
  }
  total = total + n
 }

}


(2)func MultiReader(readers ...Reader) Reader這個函數一看就知道是封裝了多個readers,跟上邊的方法差不多,只是封裝了多個而已,當然還去除了讀取的限制,我們代碼給大家測試一下
復制代碼 代碼如下:

import (
 "fmt"
 "io"
 "os"
 "reflect"
)

func main() {
 f1, _ := os.Open("test1.txt")
 f2, _ := os.Open("test.txt")
 defer f1.Close()
 defer f2.Close()
 reader := io.MultiReader(f1, f2) //*io.multiReader
 fmt.Println(reflect.TypeOf(reader))
 p := make([]byte, 10)
 var total int
 var data string
 for {
  n, err := reader.Read(p)
  if err == io.EOF {
   fmt.Println("read end", total) //read end 17
   break
  }
  total = total + n
  data = data + string(p[:n])
 }
 fmt.Println("read value", data)  //read value widuu2hello widuu
 fmt.Println("read count", total) // read count 17
}


(3)既然上邊介紹讀了,我這介紹個寫吧type Write`func MultiWriter(writers ...Writer) Writer一樣的作用只不過是這次換成寫了
復制代碼 代碼如下:

import (
 "fmt"
 "io"
 "io/ioutil"
 "os"
)

func main() {
 f1, _ := os.Create("1.txt")
 f2, _ := os.Create("2.txt")
 writer := io.MultiWriter(f1, f2)
 writer.Write([]byte("widuu"))
 //千萬別這么邏輯來 ,我這是測試用的哈
 r1, _ := ioutil.ReadFile("1.txt")
 r2, _ := ioutil.ReadFile("2.txt")
 fmt.Println(string(r1)) //widuu
 fmt.Println(string(r2)) //widuu
}


(4)func TeeReader(r Reader, w Writer) Reader這個方法有意思是從r中讀取數據然后寫入到w中,這個沒有內部緩沖區,看下代碼
復制代碼 代碼如下:

import (
 "fmt"
 "io"
 "os"
 "reflect"
)

func main() {
 r, _ := os.Open("test.txt")
 w, _ := os.Create("test2.txt")
 reader := io.TeeReader(r, w)
 fmt.Println(reflect.TypeOf(reader)) //*io.teeReader
 p := make([]byte, 10)
 n, _ := reader.Read(p)
 fmt.Println(string(p[:n])) //hello widu
}


type SectionReader{}

復制代碼 代碼如下:

type SectionReader struct {
    // contains filtered or unexported fields
}


(1)func NewSectionReader(r ReaderAt, off int64, n int64) *SectionReader,你一看就知道了,其實就是通過這個方法獲取到io.SectionReader,第一個參數讀取器,第二個參數偏移量,第三個參數是讀取多少

復制代碼 代碼如下:

import (
 "fmt"
 "io"
 "os"
 "reflect"
)

func main() {
 f, _ := os.Open("test.txt")
 sr := io.NewSectionReader(f, 2, 5)
 fmt.Println(reflect.TypeOf(sr)) //*io.SectionReader
}


(2)func (s *SectionReader) Read(p []byte) (n int, err error)熟悉的read()其實就是讀取數據用的,大家看函數就可以理解了,因為咱們經常遇到這個上兩個都寫這個了~~
復制代碼 代碼如下:

import (
 "fmt"
 "io"
 "os"
)

func main() {
 f, _ := os.Open("test.txt")
 defer f.Close()
 sr := io.NewSectionReader(f, 2, 5)
 p := make([]byte, 10)
 n, err := sr.Read(p)
 if err != nil {
  fmt.Println(err)
 }
 fmt.Println(string(p[:n])) //llo w
}


(3)func (s *SectionReader) ReadAt(p []byte, off int64) (n int, err error)額這個跟之前的ReadAt是一樣的,只不過只有一個偏移量,少了截取數,但是你要知道SectionReader做的是什么就把數據截取了,所以就不需要截取數了
復制代碼 代碼如下:

import (
 "fmt"
 "io"
 "os"
)

func main() {
 f, _ := os.Open("test.txt")
 defer f.Close()
 sr := io.NewSectionReader(f, 2, 5)
 p := make([]byte, 10)
 n, err := sr.ReadAt(p, 1)
 if err == io.EOF {
  fmt.Println(string(p[:n])) // lo w
 }

}


(4)func (s *SectionReader) Seek(offset int64, whence int) (int64, error)這個是設置文件指針的便宜量的,之前我們的os里邊也是有個seek的,對SectionReader的讀取起始點、當前讀取點、結束點進行偏移,offset 偏移量,whence 設定選項 0:讀取起始點,1:當前讀取點,2:結束點(不好用),其他:將拋出Seek: invalid whence異常
復制代碼 代碼如下:

import (
 "fmt"
 "io"
 "os"
)

func main() {
 f, _ := os.Open("test.txt")
 defer f.Close()
 sr := io.NewSectionReader(f, 2, 5)
 p := make([]byte, 10)
 sr.Seek(1, 0)      //相當于起始的地址偏移1
 n, err := sr.Read(p)
 if err != nil {
  fmt.Println(err)
 }
 fmt.Println(string(p[:n])) //lo w 是不是達到了前邊的ReadAt()
}


(5)func (s *SectionReader) Size() int64返回的是可以讀取的字節數,這個不受偏移指針的影響,也不受當前讀取的影響,我們具體看下代碼
復制代碼 代碼如下:

import (
 "fmt"
 "io"
 "os"
)

func main() {
 f, _ := os.Open("test.txt")
 defer f.Close()
 sr := io.NewSectionReader(f, 2, 5)
 fmt.Println(sr.Size()) //5
 p := make([]byte, 10)
 sr.Seek(1, 0)    //相當于起始的地址偏移1
 n, err := sr.Read(p)
 if err != nil {
  fmt.Println(err)
 }
 fmt.Println(string(p[:n])) //lo w
 fmt.Println(sr.Size())     //5
}

您可能感興趣的文章:
  • 深入解析Go語言的io.ioutil標準庫使用
  • Go語言中io.Reader和io.Writer的詳解與實現
  • Go語言的IO庫那么多糾結該如何選擇

標簽:盤錦 雅安 宜昌 眉山 七臺河 邢臺 紹興 上海

巨人網絡通訊聲明:本文標題《GO語言的IO方法實例小結》,本文關鍵詞  語言,的,方法,實例,小結,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《GO語言的IO方法實例小結》相關的同類信息!
  • 本頁收集關于GO語言的IO方法實例小結的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美精品色综合| 久久电影网电视剧免费观看| 亚洲精品欧美激情| 青青草原综合久久大伊人精品| 成人a级免费电影| 久久在线免费观看| 国产一区二区三区在线观看免费| 欧美影片第一页| 偷窥国产亚洲免费视频| 日韩一区二区中文字幕| 久久不见久久见免费视频7| 久久久噜噜噜久噜久久综合| 国产精品一二一区| 中文字幕精品一区二区三区精品| 懂色中文一区二区在线播放| 国产精品白丝在线| 精品视频色一区| 韩国成人在线视频| 亚洲欧洲日韩女同| 欧美日韩中文字幕一区| 免费观看91视频大全| 欧美韩日一区二区三区四区| 国产高清精品久久久久| 亚洲免费观看高清完整版在线观看熊| 欧美日韩在线一区二区| 国产一区在线观看麻豆| 亚洲精品伦理在线| 久久综合色8888| 欧美在线不卡一区| 国产剧情在线观看一区二区| 一区二区在线观看不卡| 久久综合久久综合亚洲| 在线观看亚洲一区| 国产一区二区不卡在线| 亚洲国产精品综合小说图片区| 精品毛片乱码1区2区3区| av不卡一区二区三区| 免费看黄色91| 亚洲一二三区在线观看| 久久精品人人做人人爽97| 欧美性猛交xxxx黑人交| 成人综合在线网站| 日韩不卡一区二区三区| 亚洲欧美日本在线| 中文字幕精品—区二区四季| 日韩欧美在线综合网| 在线精品视频一区二区三四| 大白屁股一区二区视频| 激情五月播播久久久精品| 日韩成人一区二区| 午夜激情久久久| 亚洲综合成人在线| 亚洲黄一区二区三区| 欧美国产禁国产网站cc| 欧美大黄免费观看| 91精品国产综合久久精品性色| www.亚洲色图.com| 国内精品伊人久久久久av一坑| 三级不卡在线观看| 亚洲婷婷综合色高清在线| 精品久久久久av影院| 欧美精品免费视频| 欧美性大战久久| 在线一区二区视频| 欧洲av一区二区嗯嗯嗯啊| 91麻豆国产精品久久| 色综合色综合色综合色综合色综合| 日韩和欧美一区二区三区| 亚洲韩国一区二区三区| 一区二区三区在线免费观看| 亚洲三级电影全部在线观看高清| 精品电影一区二区三区 | 成人免费三级在线| 国产成人丝袜美腿| 国产精品69毛片高清亚洲| 激情久久久久久久久久久久久久久久| 久久99日本精品| 国产白丝网站精品污在线入口| 国产成人aaa| www.日韩av| 欧美日韩一区二区在线视频| 51精品久久久久久久蜜臀| 日韩一二三区不卡| 亚洲国产电影在线观看| 伊人开心综合网| 免费观看成人鲁鲁鲁鲁鲁视频| 韩国女主播一区二区三区| 成人黄色在线视频| 欧美日韩在线免费视频| 精品国产乱码91久久久久久网站| 中文字幕免费一区| 亚洲一区二区在线观看视频| 日韩电影在线观看一区| 床上的激情91.| 欧美一区二区三区成人| 国产精品伦理在线| 午夜不卡av免费| 国产成人av一区二区三区在线| 一本大道久久a久久精二百| 欧美日韩国产在线观看| 久久久噜噜噜久噜久久综合| 亚洲欧美日韩久久| 亚洲小少妇裸体bbw| 国产成人日日夜夜| 欧美日韩国产高清一区| 久久精品日产第一区二区三区高清版| 自拍视频在线观看一区二区| 男女男精品视频网| 99re8在线精品视频免费播放| 91日韩一区二区三区| 精品少妇一区二区三区日产乱码 | 视频一区欧美精品| 青青草国产成人av片免费| 国产成人av在线影院| 欧美高清一级片在线| 亚洲国产精品av| 久久99久久99| 色综合中文字幕国产 | 麻豆国产91在线播放| 国产综合久久久久久久久久久久| 91首页免费视频| 欧美激情一二三区| 久久99精品久久久久婷婷| 欧美日韩中文一区| 最新热久久免费视频| 久久激情五月婷婷| 欧美三级日本三级少妇99| 中文字幕制服丝袜成人av| 国产成人精品影视| 国产日产欧美一区| 国产精品一区一区三区| 26uuu精品一区二区| 久久99九九99精品| 精品国产123| 国产精品一级二级三级| 91麻豆精品国产91久久久久久久久| 亚洲视频一二三区| 成人国产精品视频| 国产片一区二区| 成人午夜在线播放| 欧美电影免费提供在线观看| 亚洲超碰97人人做人人爱| 91在线视频播放| 亚洲视频在线观看一区| 国产91精品久久久久久久网曝门| 国产日产欧美一区| gogogo免费视频观看亚洲一| www欧美成人18+| 日本成人在线不卡视频| 欧美电影免费观看高清完整版 | 国产精品毛片久久久久久| 国产99久久久国产精品潘金网站| 26uuu欧美| 国产999精品久久| 国产精品盗摄一区二区三区| 国产成人99久久亚洲综合精品| 国产精品私人自拍| 欧美亚洲愉拍一区二区| 亚洲精品高清在线观看| 在线观看视频91| 一区二区在线观看免费视频播放| 在线视频一区二区三区| 亚洲激情自拍偷拍| 精品视频免费看| 久久99国产精品免费网站| 精品剧情在线观看| 国产在线一区二区| 国产精品久久久久影院老司 | 色天使久久综合网天天| 国产精品系列在线| 9色porny自拍视频一区二区| 亚洲成av人片在线| 91精品在线免费| 国产精品自拍av| 亚洲欧美综合网| 91传媒视频在线播放| 热久久一区二区| 亚洲日本韩国一区| 久久精品欧美日韩精品| 最新国产精品久久精品| 欧美久久久一区| 99久久精品免费看国产免费软件| 三级久久三级久久| 亚洲欧美另类在线| 日韩亚洲欧美成人一区| 成人污视频在线观看| 亚洲国产精品尤物yw在线观看| 久久久91精品国产一区二区精品| 欧美中文字幕一区二区三区| 国产成人高清视频| 免费视频最近日韩| 亚洲人成小说网站色在线 | 日韩国产精品久久久久久亚洲| 日韩三区在线观看| 北岛玲一区二区三区四区| 日本中文字幕一区二区视频 | 国产精品亚洲成人| 日韩国产欧美在线视频| 一区二区三区影院| 久久久亚洲精品石原莉奈|