亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

GO語言io包的常用接口

2020-04-01 19:23:29
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了GO語io包的常用接口,分析了GO語言接口的概念與功能,并實例列舉了幾個最常用的接口的用法,具有一定的參考借鑒價值,需要的朋友可以參考下
 

本文實例分析了GO語io包的常用接口。分享給大家供大家參考。具體分析如下:

我沒有 C/C++ 基礎,沒有接口的概念,且從 Python 投奔而來,Python 的極簡主義(一個結果往往只提供一個方法),讓我在 Golang 中非常迷糊,特別是文件的讀寫操作,因為 Go 的文件讀寫操作有很多的方法,讓我不知道怎么選擇。直到我學習了 interface 的概念,然后由看了 package io 后才慢慢理解,也漸漸的喜歡上了 Golang 的靈活性。以我的經驗來說,接口是一個很重要的知識點,是一系列操作的規范,特別是公共接口尤為重要,如:package io

本文僅僅列舉最常用的幾個接口,如果您想系統的學習 io 接口,建議閱讀底部參考鏈接。

一、IO 接口概述

package os 提供了對 I/O 原語的基本接口,使之成為共享的公共接口,這些公共接口抽象出了泛用的函數并附加了一些相關的原語的操作。因為這些接口和原語是對底層實現完全不同的低水平操作的包裝,除非得到其它方面的通知,客戶端不應假設它們是并發執行安全的。

在 package os 中最重要的是兩個接口:Reader 和 Writer 接口。本章所提到的各種接口,都跟這兩個接口有關,也就是說,只要實現了這兩個接口,它就有了 IO 的功能。

小貼士:

var EOF = errors.New("EOF"): 在 package io中定義,使用非常頻繁。正常情況下當 Read() 無法得到更多返回時就返回 EOF,即文件到達了結尾(end-of-file)。

二、io.Reader 和 io.Writer

定義:

復制代碼代碼如下:
type Reader interface {
    Read(p []byte) (n int, err error)
}

 

type Writer interface {
    Write(p []byte) (n int, err error)
}


Read 將 len(p) 個字節讀取到 p 中,當遇到任何錯誤(包括EOF)會立即返回已讀取的字節數,函數結束會返回成功讀取的字節數和任何錯誤。
Write 將 len(p) 字節數據從 p 寫入底層的數據流,然后返回成功寫入的字節數和任何錯誤。

 

從接口名稱很容易猜到,一般地,Go中接口的命名約定:接口名以er結尾。注意,這里并非強行要求,你完全可以不以 er 結尾。標準庫中有些接口也不是以 er 結尾的。
示例:

復制代碼代碼如下:
func wr() {
 f, _ := os.Create("at.txt")
 defer f.Close()
 f.Write([]byte("Go是一種令人愉悅的編程語言")) //寫入字節流
 f.Seek(0, os.SEEK_SET)            //將指針重置

 

 p := make([]byte, 2) // 讀取 2 byte( len(buf)=2 )
 if _, err := f.Read(p); err != nil {
  log.Fatal("[F]", err)
 }
 fmt.Printf("讀取字符 /"%s/", 長度為 %d byte/n", p, len(p))

 p = make([]byte, 50)
 if _, err := f.Read(p); err != nil {
  if err != io.EOF { //忽略 EOF 錯誤
   log.Fatal("[F]", err)
  }
 }
 fmt.Printf("讀取字符 /"%s/", 長度為 %d byte/n", p, len(p))
}


讀取字符 "Go", 長度為 2 byte
讀取字符 "是一種令人愉悅的編程語言              ", 長度為 50 byte

 

三、io.ReaderAt 和 os.WriterAt

定義(off 是 offset 的縮寫):

復制代碼代碼如下:
type ReaderAt interface {
    ReadAt(p []byte, off int64) (n int, err error)
}

 

type WriterAt interface {
    WriteAt(p []byte, off int64) (n int, err error)
}


ReadAt() 從基本輸入源的偏移量 off 處開始,其他和 Read() 一樣;
WriteAt() 從基本輸入源的偏移量 off 處開始,其他和 Write() 一樣。

 

示例:

復制代碼代碼如下:
func at() {
 f, _ := os.Create("at.txt")
 defer f.Close()

 

 f.WriteString("Go是一種令人愉悅的編程語言")
 f.WriteAt([]byte("程序"), 26) //偏移 26byte 改寫“編程”->“程序”

 fi, _ := f.Stat()              //獲取文件信息
 p := make([]byte, fi.Size()-2) //文件大小減去偏移值
 f.ReadAt(p, 2)                 //偏移 2 byte

 os.Stdout.Write(p)
}

 

四、io.ReaderFrom 和 os.WriterTo

定義:

復制代碼代碼如下:
type ReaderFrom interface {
    ReadFrom(r Reader) (n int64, err error)
}

 

type WriterTo interface {
    WriteTo(w Writer) (n int64, err error)
}


ReadFrom() 從 r 中讀取數據,直到 EOF 或發生錯誤。返回讀取的字節數和 io.EOF 之外的其他錯誤。ReadFrom不會返回EOF錯誤

 

WriteTo() 將數據寫入 w 中,直到沒有數據可寫或發生錯誤。返回寫入的字節數和任何錯誤。

示例:

復制代碼代碼如下:
func fromTo() {
 r := strings.NewReader("Go是一種令人愉悅的編程語言") //創建一個 Reader
 w := bufio.NewWriter(os.Stdout)          //創建一個 Writer

 

 w.ReadFrom(r) // w 一次性讀取 r 的全部內容
 w.Flush()

 r.Seek(0, os.SEEK_SET) //重置指針

 r.WriteTo(w) // r 一次性將內容寫入 w 中
 w.Flush()
}

 

五、io.Seeker

定義:

復制代碼代碼如下:
type Seeker interface {
    Seek(offset int64, whence int) (ret int64, err error)
}

Seek 設置下一次 Read 或 Write 的偏移量(offset),它的解釋取決于 whence。示例見上文。

 

whence的值,在os包中定義了相應的常量:

復制代碼代碼如下:
SEEK_SET int = 0 //從文件的起始處開始設置 offset
SEEK_CUR int = 1 //從文件的指針的當前位置處開始設置 offset
SEEK_END int = 2 //從文件的末尾處開始設置 offset

六、io.Closer

 

定義:

復制代碼代碼如下:
type Closer interface {
    Close() error
}

用于關閉數據流,釋放資源,不用多廢話了吧。

 

七、其他

復制代碼代碼如下:
type ByteReader interface {
 ReadByte() (c byte, err error)
}

 

type RuneReader interface {
    ReadRune() (r rune, size int, err error)
}


ReadByte讀取輸入中的單個字節并返回。如果沒有字節可讀取,會返回錯誤。
ReadRune讀取單個utf-8編碼的字符,返回該字符和它的字節長度。如果沒有有效的字符,會返回錯誤。
復制代碼代碼如下:
type ByteWriter interface {
    WriteByte(c byte) error
}

WriteByte寫入一個字節,如果寫入失敗會返回錯誤。

 

參考:
https://gowalker.org/io
https://github.com/polaris1119/The-Golang-Standard-Library-by-Example/blob/master/chapter01/01.1.md

希望本文所述對大家的GO語言程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情久久久久久| 亚洲自拍中文字幕| 久久久久久成人| 久久精品国产亚洲精品2020| 97国产精品视频| 欧美丰满少妇xxxxx做受| 日韩av在线电影网| 国产色视频一区| 大桥未久av一区二区三区| 91精品久久久久久久久久入口| 欧美另类交人妖| 亚洲视频在线观看网站| 国产精品自在线| 91沈先生在线观看| 日韩在线观看免费网站| 欧美中文在线观看国产| 久久久久久亚洲| 欧美又大又硬又粗bbbbb| 亚洲第一区在线| 性欧美亚洲xxxx乳在线观看| 欧洲成人在线视频| 日韩国产高清视频在线| 狠狠色狠狠色综合日日五| 美日韩精品免费观看视频| 自拍偷拍亚洲欧美| 最新的欧美黄色| 欧美日本黄视频| 中文字幕日韩欧美在线| 色777狠狠综合秋免鲁丝| 亚洲成色777777女色窝| 亚洲理论电影网| 日韩精品在线视频| 精品国产一区二区三区久久狼5月| 国产精品69精品一区二区三区| 久久久久久久香蕉网| 国产午夜精品全部视频在线播放| 成人国产在线视频| 欧美性xxxxxxx| 国产精品久久久久久久久久ktv| 亚洲国产成人精品久久| 国产97色在线|日韩| 久久久久一本一区二区青青蜜月| 亚洲一区久久久| 欧美夜福利tv在线| 7m第一福利500精品视频| 2019av中文字幕| 狠狠操狠狠色综合网| 国产日产久久高清欧美一区| 欧美在线视频免费播放| 红桃av永久久久| 91亚洲国产成人久久精品网站| 国内精品模特av私拍在线观看| 九色精品免费永久在线| 亚洲男人天堂2019| 亚洲欧美日韩天堂| 久久久久久久久久久av| 国产精品美女视频网站| 国产精品成人v| 日韩亚洲欧美中文高清在线| 青青a在线精品免费观看| 日韩欧美中文字幕在线观看| 国产精品久久久久久久久免费看| 精品中文字幕在线| 91精品国产综合久久香蕉922| 国产成人拍精品视频午夜网站| zzjj国产精品一区二区| 中文字幕av一区| 国产91在线高潮白浆在线观看| 日韩国产高清视频在线| 蜜月aⅴ免费一区二区三区| 国产日产欧美a一级在线| 亚洲国语精品自产拍在线观看| 欧美中文字幕在线| 久久久久一本一区二区青青蜜月| 欧美猛交免费看| 成人激情视频小说免费下载| 夜夜狂射影院欧美极品| 亚洲成年人影院在线| 欧美日韩亚洲一区二区三区| 久久91亚洲精品中文字幕| 亚洲国产欧美一区二区三区同亚洲| 国产日韩精品在线| 日韩69视频在线观看| 久久福利网址导航| 日韩福利视频在线观看| 伊人成人开心激情综合网| 热久久美女精品天天吊色| 国产精品免费久久久| 91色视频在线导航| 亚洲欧美在线一区| 日韩免费视频在线观看| 欧美国产极速在线| 国产一区二区三区直播精品电影| 国产一区视频在线| 亚洲福利影片在线| 欧美性猛交xxx| 国产成人中文字幕| 国产91免费看片| 91丝袜美腿美女视频网站| 国产一区二区动漫| 久久久久久网站| 色综合久综合久久综合久鬼88| 久久网福利资源网站| www.国产一区| 欧美黄色片免费观看| 久久久成人av| 国内精品久久久久伊人av| 日韩精品丝袜在线| 欧美xxxwww| 欧美精品在线观看91| 九九精品在线播放| 日本老师69xxx| 亚洲人成电影在线观看天堂色| 91精品啪在线观看麻豆免费| 欧美激情一区二区三区久久久| 精品一区二区亚洲| 亚洲另类激情图| 91最新在线免费观看| 中文字幕欧美亚洲| 欧美一区二区三区精品电影| 国产精品久久久久福利| 91在线观看免费| 最近2019好看的中文字幕免费| 国产啪精品视频网站| 91香蕉嫩草神马影院在线观看| 国产丝袜一区二区三区免费视频| 久久偷看各类女兵18女厕嘘嘘| 成人网页在线免费观看| 日韩av片永久免费网站| 岛国av在线不卡| 久久九九全国免费精品观看| 午夜精品99久久免费| 日韩动漫免费观看电视剧高清| 91精品视频专区| 三级精品视频久久久久| 亚洲国产精品资源| 国产精品黄色av| 欧美激情视频在线免费观看 欧美视频免费一| 欧美在线视频a| 国产在线播放91| 国产视频一区在线| 欧美一性一乱一交一视频| 国产91色在线|免| 久久久国产视频| 亚洲乱码一区av黑人高潮| 欧美激情综合色综合啪啪五月| 国产亚洲欧美aaaa| 亚洲一区国产精品| 国产亚洲美女久久| 国语自产在线不卡| 精品国内自产拍在线观看| 国产一区二区av| 久久久极品av| 欧美黑人一级爽快片淫片高清| 亚洲色图综合久久| 欧洲成人在线视频| 欧美在线视频免费| 日韩中文有码在线视频| 精品美女久久久久久免费| 国产成人极品视频| 亚洲区中文字幕| 国产91亚洲精品| 色婷婷av一区二区三区在线观看| 欧美视频在线观看免费网址|