日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > Golang > 正文

Go語言編程中對文件讀寫的基本方法整理

2020-04-01 19:25:23
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Go語言編程中對文件讀寫的基本方法整理,是Go語言入門學習中的基礎知識,需要的朋友可以參考下
 

1.func Copy(dst Writer, src Reader) (written int64, err error)這個函數是從一個文件讀取拷貝到另外一個文件,一直拷貝到讀取文件的EOF,所以不會返回io.EOF錯誤,參數是寫入目標器和讀取目標器,返回int64的拷貝字節數和err信息

 

復制代碼代碼如下:

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

 

func main() {
 r, _ := os.Open("test.txt")
 w, _ := os.Create("write.txt")
 num, err := io.Copy(w, w)
 if err != nil {
  fmt.Println(err)
 }
 fmt.Println(num) //返回int64的11 打開我的write.txt正是test.txt里邊的hello widuu

 


 

2.func CopyN(dst Writer, src Reader, n int64) (written int64, err error)看函數就知道了跟上述的是一樣的,只是多加了一個讀取數的限制,然后我們看下代碼

復制代碼代碼如下:

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

 

func main() {
 r, _ := os.Open("test.txt")
 w, _ := os.Create("write1.txt")
 num, err := io.CopyN(w, r, 5)
 if err != nil {
  fmt.Println(err)
 }
 defer r.Close()
 b, _ := ioutil.ReadFile("write1.txt")
 fmt.Println(string(b)) //輸出 hello
 fmt.Println(num)       //5
}

 


 

3.func ReadAtLeast(r Reader, buf []byte, min int) (n int, err error)這個函數就是從讀取器中讀取數據放到我們的buf中,限定了最小的讀取字節數,如果我們讀取的數據小于最小讀取器,譬如你設定min的值是8,但是你讀取的數據字節數是5就會返回一個`io.ErrUnexpectedEOF`,如果大于就會返回`io.ErrShortBuffer`,讀取完畢會有`io.EOF`~~,多講一些哈,這個Reader只要我們滿足這個interface就可以用這個

復制代碼代碼如下:

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

 

 


其中*File就支持func (f *File) Read(b []byte) (n int, err error)

 

 

復制代碼代碼如下:

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

 

func main() {
 r, _ := os.Open("write1.txt")
 b := make([]byte, 20)
 defer r.Close()
 var total int
 for {
  n, err := io.ReadAtLeast(r, b, 8)
  if err == nil {
   fmt.Println("Read enough value:", string(b)) // Read enough value: hello widuu
  }
  if err == io.ErrUnexpectedEOF { //讀取了的數據小于我們限定的最小讀取數據8
   fmt.Println("Read fewer value:", string(b[0:n]))
  }
  
  if err == io.ErrShortBuffer{   //這個是我們設定的buf也就是b小于我們限定8
   fmt.Println("buf too Short")
   os.Exit(1)
  }
  if err == io.EOF { //讀完了 輸出
   fmt.Println("Read end total", total) //Read end total 11
   break
  }
  total = total + n
 }
}

 


 

4.func ReadFull(r Reader, buf []byte) (n int, err error)這個函數和上邊的函數是相似,只不過是讀取len(buf)個,放在buf中

 

復制代碼代碼如下:

 

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

func main() {
 r, _ := os.Open("write.txt")
 b := make([]byte, 20)
 num, err := io.ReadFull(r, b)
 defer r.Close()
 if err == io.EOF {
  fmt.Println("Read end total", num)
 }
 if err == io.ErrUnexpectedEOF {
  fmt.Println("Read fewer value:", string(b[:num])) //Read fewer value: hello widuu,依然是buf長度大于讀取的長度
  return
 }

 fmt.Println("Read  value:", string(b)) //如果b是5 就出現這里
}

 


 

5.func WriteString(w Writer, s string) (n int, err error)弄完讀了,當然帶要寫了,這個函數主要是向寫入目標中寫入字符創,返回是寫入的字節數還有error錯誤,主要是權限的錯誤,其中寫入呀!都是writer這個結構就可以寫入

 

復制代碼代碼如下:

 

type Writer interface {
    Write(p []byte) (n int, err error)
}
跟read一樣我們的*File是有func (f *File) Write(b []byte) (n int, err error),當然其實我們的*File中就已經有WirteString了func (f *File) WriteString(s string) (ret int, err error)
import (
 "fmt"
 "io"
 "io/ioutil"
 "os"
)

func main() {
 w, _ := os.OpenFile("write1.txt", os.O_RDWR, os.ModePerm)
 n, err := io.WriteString(w, "ni hao ma")
 if err != nil {
  fmt.Println(err) //當我用os.open()的時候木有權限  悲催的~~輸出write write1.txt: Access is denied.
 }
 defer w.Close()
 b, _ := ioutil.ReadFile("write1.txt")
 fmt.Println("write total", n) //write total 9
 fmt.Println(string(b))        // ni hao ma
}

 


 

6.type LimitedReader

 

復制代碼代碼如下:

 

type LimitedReader struct {
    R Reader // 讀取器了
    N int64  // 最大字節限制
}

 


只實現了一個方法func (l *LimitedReader) Read(p []byte) (n int, err error)其實我們不難發現這個跟我們的ReadAtLast()就是親兄弟的節奏

 

 

復制代碼代碼如下:

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

 

func main() {
 reader, _ := os.Open("test.txt")
 limitedreader := io.LimitedReader{
  R: reader,
  N: 20,
 }
 p := make([]byte, 10)
 var total int
 for {
  n, err := limitedreader.Read(p)
  if err == io.EOF {
   fmt.Println("read total", total)     //read total 11
   fmt.Println("read value", string(p)) //read value hello widuu
   break
  }
  total = total + n

 }

}

 


 

7.type PipeReader

 

復制代碼代碼如下:

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

 

 


(1)func Pipe() (*PipeReader, *PipeWriter)創建一個管道,并返回它的讀取器和寫入器,這個會在內存中進行管道同步,它的開啟會io.Reader然后等待io.Writer的輸入,沒有內部緩沖,它是安全的調用Read和Write彼此和并行調用寫

 

 

復制代碼代碼如下:

 

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

func main() {
 r, w := io.Pipe()
 fmt.Println(reflect.TypeOf(r)) //*io.PipeReader
 fmt.Println(reflect.TypeOf(w)) //*io.PipeWriter
}

 


(2)func (r *PipeReader) Close() error管道關閉后,正在進行或后續的寫入Write操作返回ErrClosedPipe
復制代碼代碼如下:

import (
 "fmt"
 "io"
)

 

func main() {
 r, w := io.Pipe()
 r.Close()

 _, err := w.Write([]byte("hello widuu")) 

 if err == io.ErrClosedPipe {
  fmt.Println("管道已經關閉無法寫入") //管道已經關閉無法寫入
 }
}

 


(3)func (r *PipeReader) CloseWithError(err error) error這個就是上邊的r.Close關閉的時候,寫入器會返回錯誤的信息

 

 

復制代碼代碼如下:

 

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

func main() {
 r, w := io.Pipe()
 r.Close()
 err := errors.New("管道符關閉了") //errors這個包我們前邊已經說過了,就一個方法New不會的可以看看前邊的
 r.CloseWithError(err)
 _, err = w.Write([]byte("test"))
 if err != nil {
  fmt.Println(err) //管道符關閉了
 }
}

 


(4)func (r *PipeReader) Read(data []byte) (n int, err error)標準的閱讀接口,它從管道中讀取數據、阻塞一直到一個寫入接口關閉,如果寫入端發生錯誤,它就會返回錯誤,否則返回的EOF

 

 

復制代碼代碼如下:

import (
 "fmt"
 "io"
)

 

func main() {
 r, w := io.Pipe()
 go w.Write([]byte("hello widuu"))
 d := make([]byte, 11)
 n, _ := r.Read(d) //從管道里讀取數據
 fmt.Println(string(d))
 fmt.Println(n)
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
欧美二三四区| 日韩亚洲一区在线| 精品国产999| 国产v日产∨综合v精品视频| 日韩三级免费观看| 日韩精品视频中文字幕| 午夜私人影院在线观看| 婷婷久久综合九色国产成人| 亚洲一区日韩精品中文字幕| 亚洲国产一区自拍| 国产成人精品三级| 亚洲一区日韩精品中文字幕| 在线日韩精品视频| 国产一区高清视频| 国产啊啊啊视频在线观看| 区日韩二区欧美三区| 久久夜色精品国产噜噜亚洲av| 一级日韩一级欧美| 一区二区三区在线播放视频| 中文在线视频| 欧美日韩精品在线观看| 午夜精品免费视频| 午夜国产福利一区二区| av手机天堂| 成人a在线观看| 蜜桃视频中文字幕| 久久精品女人| 亚洲综合在线小说| 亚洲一区中文| 欧美日韩国产一二| wwwwww在线观看| 亚洲成av人片一区二区密柚| 亚洲一区在线观看视频| 欧美三级在线播放| 美国av一区二区| 久久精品人妻一区二区三区| 亚洲三级网站| 欧美wwww| 欧美日韩国产一二| 一区二区三区鲁丝不卡| 亚洲综合三区| 中文字幕第一页在线| 欧美色欧美亚洲高清在线视频| 国产在线高潮| 韩国v欧美v日本v亚洲| 国产欧美日韩精品综合| 99在线国产| 日韩欧美在线网站| 91精品国产91久久久久久青草 | 中文字幕一区免费| 一区二区不卡视频| 国产成人精品网址| 国产欧美日韩在线观看| 久久久精品网| 免费中文字幕日韩欧美| 国产香蕉免费精品视频| 国产色在线 com| 国产91大片| 国产一级免费在线观看| 亚洲狠狠婷婷综合久久久久图片| 色综合天天综合网天天狠天天 | 久久精品国产99| 红桃视频亚洲| 国产乱一区二区| 欧美中文字幕第一页| 欧美日韩精品是欧美日韩精品| 中文字幕国产日韩| 91精品久久久久久久久久| 一区二区不卡视频| 国产视频1区| 中文在线不卡视频| 99视频在线看| 欧美国产三级| 91精品在线观看视频| 欧美色视频一区二区三区在线观看| 国产一级久久久| 亚洲一卡二卡在线观看| 国产三级做爰在线观看| 亚洲成年人在线播放| 亚洲高清不卡一区| www.狠狠| 国产欧美日韩综合精品| 91精品观看| 欧美日韩视频免费播放| 日本不卡视频一区| 日韩欧美一级精品久久| 国产成人精品免费久久久久| 91亚洲欧美| 91精品国产免费| 日本精品免费观看高清观看| 日本黄色一区二区三区| 亚洲视频在线观看三级| 91色在线看| 国产羞羞视频在线播放| 欧美婷婷久久| 天天综合日日夜夜精品| 在线手机中文字幕| 99精品视频99| 日韩在线视频一区| 国产一区不卡精品| 精品一性一色一乱农村| 欧美 日韩 国产在线| 久久中文精品| 日韩国产91| 免费高清特黄a大片| 欧美日韩精品高清| 国产在线不卡一区| 日韩欧美中文免费| 中文字幕欧美日韩| 国产久卡久卡久卡久卡视频精品| 亚洲а∨精品天堂在线| 中文在线第一页| 婷婷久久综合网| 国产成人精品av久久| 91精品蜜臀在线一区尤物| 中文字幕在线看视频国产欧美| 91久久中文| 欧美日韩国产高清| 青青国产91久久久久久| 精品国产免费观看一区| 亚洲黄色一区二区| 亚洲欧美中文字幕在线观看| 亚洲社区在线| 亚洲欧美中文字幕在线一区| 91精品综合久久久久久| 欧美中日韩在线| 久久精品www| av中文网站| 亚洲 欧美综合在线网络| 91精品久久久久久蜜臀| 欧美婷婷精品激情| 蜜臀91精品国产高清在线观看| 国产免费播放一区二区| 日本不卡高清视频一区| wwwav在线播放| 日韩视频国产视频| 国产乱国产乱老熟300部视频| 国产区高清在线| 一区精品在线播放| 一级片在线免费看| 欧美性生交大片免费| 免费在线视频一级不卡| 国产偷国产偷亚洲清高网站| 国产欧美日韩亚洲| 久久av免费| 免费在线观看国产黄| 日韩欧美亚洲国产一区| av免费在线不卡| 亚洲欧美韩国综合色| 中文精品在线观看| 日韩中文字幕第一页| 欧美日韩在线播放一区| 国产小视频在线| 亚洲综合在线中文字幕| 亚洲欧美中文字幕在线一区| 最近免费中文字幕在线第一页| 欧美日韩夫妻久久| 亚洲免费福利视频| 深夜福利亚洲| 一区二区三区视频网站| 黄色在线播放网站| 欧美日韩在线观看一区| 91精品国产综合久久久久久| 欧美激情一区二区在线| av免费在线网站| 1区2区3区在线视频| 亚洲一区中文字幕在线| 欧美 日韩 综合| 国产三级精品网站| 国产99在线 | 亚洲| 精品日韩在线播放| 国产乱国产乱老熟300部视频| 欧美三级中文字幕| 91精品国产色综合久久不卡蜜臀| 中文字幕最新精品| 欧美日韩中国免费专区在线看| 色综合婷婷久久| 亚洲一区在线观看免费| 狠狠色噜噜狠狠狠狠97| 中文字幕亚洲二区 | 亚洲成年人在线播放| 91精品在线观看国产| 蜜臀91精品国产高清在线观看| 日韩欧美综合| 亚洲一区在线视频观看| 亚洲综合在线小说| 中文国产字幕在线观看| 美女免费视频一区| 欧美日韩精品欧美日韩精品| 精品久久在线观看| 久久激情中文| 91精品国产乱码久久蜜臀| 精品欧美日韩| 一区免费在线| 国产高清不卡av| 91最新在线| 亚洲一区在线观看视频| 免费看黄资源大全高清| 中文字幕日韩免费视频| 国产欧美久久久| 欧美精品一区二区三区在线播放| 亚洲成在线观看| 在线视频第一页| 欧美日韩在线网站| wwwwww在线观看| 日韩欧美在线视频日韩欧美在线视频| 日本不卡高清视频一区| 欧美特黄一区| 精品久久久三级| 91精品国产自产观看在线| 欧美国产日韩在线播放| 亚洲尤物av| 中文字幕在线观看国产| 一区二区三区在线免费| 欧美日韩第一| 在线看的av| 99精品人妻国产毛片| 国产亚洲短视频| 日韩高清在线不卡| 日韩在线精品| 欧美日韩一二三四| 一本大道一区二区三区| 欧美日韩国产999| 国产久卡久卡久卡久卡视频精品| 国产99在线|亚洲| 欧美日韩综合在线观看| 欧美三级在线播放| 一级特黄大欧美久久久| 国产偷国产偷亚洲清高网站 | 日韩欧美亚洲视频| 91日韩中文字幕| 欧美中文字幕在线观看视频| 91精品国产综合久久久久久| 韩国av一区二区| 亚洲欧美999| 欧美日韩中文字幕日韩欧美| 国产午夜精品一区二区三区视频| 精品播放一区二区| 亚洲一区在线视频观看| 欧美日韩精品在线| 欧洲精品在线一区| 国产在线黄色片| 欧美日韩亚洲国产综合| 精品福利二区三区| 亚洲免费中文字幕| 欧美一级在线免费| 日本不卡视频一区| 国产视频一区三区| 91精品国产手机| 久久视频www| 91久久视频| 国产成人精品综合久久久| 欧美 日韩 国产 在线| 中文在线视频观看| 中文字幕亚洲视频| 国产69精品久久久久孕妇国产69久久 | 久久久99精品久久| 不卡一区二区三区视频| av免费看在线| 不卡视频一区二区| 国产高清一区| 一级片免费在线播放| 日韩国产专区| 91精品国产综合久久精品| 久草视频在线看| 色99中文字幕| 中文字幕精品在线视频| 韩国v欧美v日本v亚洲| 日韩精品福利一区二区三区| www日韩欧美| 日韩精品视频免费在线观看| 国产福利在线播放| 狠狠色综合色区| 中文字幕亚洲一区在线观看| 精品日韩av| 成人ww免费完整版在线观看| 欧美日韩高清在线播放| 日韩欧美一卡二卡| 国产免费久久| 亚洲欧美日本国产专区一区| 999在线视频| 日韩欧美亚洲视频| 欧美,日韩,国产在线| 日韩欧美国产视频| 精品久久久精品| 国产又粗又猛又爽又黄91精品| av免费看在线| 在线观看av的网站| 国产黄色小视频| av中文天堂在线| 久久婷婷综合国产| 不卡av免费在线| 91久久精品国产| 国产一级在线免费观看| 欧美日韩精品免费看| 欧美日韩中文字幕在线| 精品久久久视频| 91精品国产手机| 国产乱码在线观看| 国产91大片| 丰满少妇一区| 91精品国产综合久久久久久漫画| 婷婷中文字幕一区三区| 欧美 日韩 国产在线观看| 国产高潮久久久| 国产黄在线播放| 日本免费看黄| 日韩精品视频中文字幕| 亚洲视频在线观看三级| 国产欧美日韩视频| aa国产成人| 精品视频www| 国产日韩中文字幕在线| 国产福利一区二区在线精品| 欧美在线日韩| 日韩欧美亚洲日产国| 91蜜桃在线视频| 欧美一卡2卡三卡4卡5免费| 日韩欧美综合视频| 亚洲日产av中文字幕| 欧美日韩亚洲视频| 国产视频1区| 国产一区在线精品| 国产免费电影网站入口| 一区二区三区在线免费| 国产小视频免费在线观看| 久久精品欧美日韩精品| 伊人国产视频| 91精品久久久久久久久| 在线资源av| 在线国产99| 日韩国产一区三区| 国产小视频在线| 欧美日韩精品免费看| 欧美日韩一级片在线观看| 国产天堂素人系列在线视频| 欧美日韩国产一中文字不卡| 欧美一级久久久久久久久大| 99久久精品国产亚洲| 国产综合成人久久大片91| 国产卡1卡2卡三卡在线| 日韩在线精品视频| 精品日韩视频在线观看| 亚洲第一视频在线观看| 91xxx在线观看| 日韩在线观看视频一区二区| 91精品国产色综合久久不卡蜜臀 | 韩国av一区二区| 国产对白在线| 日韩欧美中文在线视频| 精品人妻一区二区三区视频| 91精品国产91久久久久| 一本一道久久a久久精品综合蜜臀| 99pao成人国产永久免费视频| 欧美日韩亚洲国内综合网俺| 精品国产乱码一区二区| 国产成人精品亚洲| 中文字幕在线观看欧美| 日韩免费视频一区二区视频在线观看 | 91色在线看| 日韩视频一区| 欧美日韩一区二区在线视频| 亚洲国产一区自拍| 日韩av一区二区在线观看| 亚洲免费中文字幕| 精品视频www| 91精品国产色综合久久久蜜香臀| 91精品国产综合久久香蕉的特点| 欧美日韩国产综合视频在线观看| 欧美日韩国产免费| 欧美高清视频一区二区三区| 中文字幕在线观看欧美| 国产黄色片中文字幕| 三级精品视频| 欧美日韩在线综合| 久久99久久99精品中文字幕| www.三级.com| 中文字幕亚洲二区 | 在线中文字幕视频| 91精品日本| 国产亚洲二区| 日本a口亚洲| 日韩精品福利视频| 一区二区精品| 91精品国产入口| 国产欧美日韩精品综合| 91精品国产91综合久久蜜臀| 91www成人久久| 91精品国产网站| 日本免费在线视频不卡一不卡二| 亚洲成在线观看| 欧美91精品| 日本亚洲欧美| 欧美中文字幕视频| 亚洲乱码中文字幕| 欧美日韩在线播放三区四区| 中文字幕在线观看精品| 亚洲一区在线观看网站| 日韩中文欧美在线| 久久久久久自在自线|