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

首頁 > 編程 > Golang > 正文

GO語言io包的常用接口

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

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

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

本文僅僅列舉最常用的幾個(gè)接口,如果您想系統(tǒng)的學(xué)習(xí) io 接口,建議閱讀底部參考鏈接。

一、IO 接口概述

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

在 package os 中最重要的是兩個(gè)接口:Reader 和 Writer 接口。本章所提到的各種接口,都跟這兩個(gè)接口有關(guān),也就是說,只要實(shí)現(xiàn)了這兩個(gè)接口,它就有了 IO 的功能。

小貼士:

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

二、io.Reader 和 io.Writer

定義:

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

 

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


Read 將 len(p) 個(gè)字節(jié)讀取到 p 中,當(dāng)遇到任何錯(cuò)誤(包括EOF)會(huì)立即返回已讀取的字節(jié)數(shù),函數(shù)結(jié)束會(huì)返回成功讀取的字節(jié)數(shù)和任何錯(cuò)誤。
Write 將 len(p) 字節(jié)數(shù)據(jù)從 p 寫入底層的數(shù)據(jù)流,然后返回成功寫入的字節(jié)數(shù)和任何錯(cuò)誤。

 

從接口名稱很容易猜到,一般地,Go中接口的命名約定:接口名以er結(jié)尾。注意,這里并非強(qiáng)行要求,你完全可以不以 er 結(jié)尾。標(biāo)準(zhǔn)庫中有些接口也不是以 er 結(jié)尾的。
示例:

復(fù)制代碼代碼如下:
func wr() {
 f, _ := os.Create("at.txt")
 defer f.Close()
 f.Write([]byte("Go是一種令人愉悅的編程語言")) //寫入字節(jié)流
 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 錯(cuò)誤
   log.Fatal("[F]", err)
  }
 }
 fmt.Printf("讀取字符 /"%s/", 長度為 %d byte/n", p, len(p))
}


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

 

三、io.ReaderAt 和 os.WriterAt

定義(off 是 offset 的縮寫):

復(fù)制代碼代碼如下:
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() 一樣。

 

示例:

復(fù)制代碼代碼如下:
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

定義:

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

 

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


ReadFrom() 從 r 中讀取數(shù)據(jù),直到 EOF 或發(fā)生錯(cuò)誤。返回讀取的字節(jié)數(shù)和 io.EOF 之外的其他錯(cuò)誤。ReadFrom不會(huì)返回EOF錯(cuò)誤

 

WriteTo() 將數(shù)據(jù)寫入 w 中,直到?jīng)]有數(shù)據(jù)可寫或發(fā)生錯(cuò)誤。返回寫入的字節(jié)數(shù)和任何錯(cuò)誤。

示例:

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

 

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

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

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

 

五、io.Seeker

定義:

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

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

 

whence的值,在os包中定義了相應(yīng)的常量:

復(fù)制代碼代碼如下:
SEEK_SET int = 0 //從文件的起始處開始設(shè)置 offset
SEEK_CUR int = 1 //從文件的指針的當(dāng)前位置處開始設(shè)置 offset
SEEK_END int = 2 //從文件的末尾處開始設(shè)置 offset

六、io.Closer

 

定義:

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

用于關(guān)閉數(shù)據(jù)流,釋放資源,不用多廢話了吧。

 

七、其他

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

 

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


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

WriteByte寫入一個(gè)字節(jié),如果寫入失敗會(huì)返回錯(cuò)誤。

 

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

希望本文所述對大家的GO語言程序設(shè)計(jì)有所幫助。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
日韩国产网站| av永久免费观看| 欧美性受xxx黑人xyx性爽| 国产成人h网站| 亚洲AV无码成人精品区明星换面| 黑人巨大精品欧美一区二区一视频| 国产777精品精品热热热一区二区| 国产精品国产三级国产传播| 日本高清+成人网在线观看| 国产一级黄色| 国产精品a级| 日本大香伊一区二区三区| 8×8x拔擦拔擦在线视频网站| 成人美女视频在线观看18| 91精品国产高清91久久久久久| 欧美爱爱免费视频| 国产精品久久久久久久久夜色| 日本成熟性欧美| 国产成人8x视频一区二区| 一级片手机在线观看| 国产在视频线精品视频www666| 一区一区视频| 先锋资源在线视频| 成人av网址在线| 久久久精品国产sm调教网站| 亚瑟国产精品| 亚洲精品精选| av电影一区二区三区| 久久久久亚洲天堂| 精品亚洲二区| 女人18毛片水真多18精品| 成人永久在线| 国产精品久久占久久| 理论片在线观看理伦片| 欧美二三四区| 亚洲在线视频免费| 国产一区免费| 国模杨依粉嫩蝴蝶150p| 日韩天堂在线| 国产午夜精品免费一区二区三区| 裸体大乳女做爰69| 在线观看免费黄色小视频| 欧美日韩国产精选| 五月六月丁香婷婷| 久久精品视频国产| 潘金莲一级黄色片| 99久久伊人网影院| 国产一区二区在线观看免费播放| 国产美女一区二区三区| 中文字幕在线观看第二页| 天堂av手机在线| 777琪琪电影午夜理伦片| 久久五月精品中文字幕| 国产精品一区二区资源| 国产精品乱码一区二区三区软件| 欧美国产三区| 男人添女人下面高潮视频| 最近的中文字幕在线看视频| 欧美日韩高清影院| 不卡一本毛片| 欧美mv和日韩mv国产网站| 三级小说一区| 日韩精品中文字幕一区二区| 国产精品7m视频| 亚洲欧洲日韩综合一区二区| 黑人精品xxx一区| 草莓视频成人appios| 久久免费偷拍视频| 亚洲中文字幕无码一区二区三区| 福利片免费在线观看| 北岛玲精品视频在线观看| 久久综合影视| 亚洲高潮女人毛茸茸| 日韩免费小视频| 欧美激情视频一区| 成人影院中文字幕| 欧美一区二区公司| 影音先锋男人在线资源| 亚洲美女动态图120秒| 欧美精品在线看| 在线不卡欧美| 人妻aⅴ无码一区二区三区| 法国伦理少妇愉情| 西瓜成人精品人成网站| 亚洲成人套图| 青青草在线观看视频| 成人激情黄色小说| 国产另类自拍| www久久久| 欧美男人操女人视频| av免费在线免费观看| 五月天婷婷视频| 婷婷久久综合九色综合99蜜桃| 尤物视频在线观看| 国产精品免费播放| 中文字幕一区二区精品| 欧美精品v日韩精品v韩国精品v| 国产视频91在线| 性18欧美另类| 日韩欧美性视频| 精品一区二区三区电影| 日日夜夜精品网站| 亚洲欧美一区二区在线观看| 爽爽淫人综合网网站| 91丨porny丨最新| 亚洲第一欧美| 亚洲毛片在线观看.| 亚洲欧美区自拍先锋| 97久久网站| 色就是色欧美| 国产小视频免费观看| 日韩av网站免费在线| 亚洲香蕉在线视频| caoporn国产一区二区| 99精品视频免费在线观看| www.黄色网| 色资源二区在线视频| 国内精品在线视频| 中文 欧美 日韩| 成人直播大秀| 欧美性色欧美a在线播放| 亚洲成人一区在线| 国产精品yjizz视频网| 九九热在线精品视频| 青青草免费观看完整版高清| 日韩精品在线播放视频| 欧美日韩一区二区三区不卡| 亚洲少妇18p| 亚洲国产美女精品久久久久∴| 日本高清久久| 香蕉视频禁止18| 日本最黄视频| 欧美日韩国产999| 户外极限露出调教在线视频| 亚洲男人天堂九九视频| 色姑娘综合av| 交100部在线观看| 久久久久久久性| 91福利国产在线观看菠萝蜜| 亚洲AV无码国产成人久久| 亚洲熟妇av乱码在线观看| 免费看黄色一级大片| 欧美一区免费| 亚洲成在人线在线播放| 在线亚洲一区| 午夜男人天堂| 天天舔夜夜操| 日韩在线理论| 好男人www社区在线视频夜恋| 肉肉av福利一精品导航| 尤物视频最新网址| 四虎国产精品成人免费4hu| 国产精品特级毛片一区二区三区| 亚洲精品成人久久| 高清成人av| 精品人妻一区二区三区四区在线| 狠狠躁天天躁日日躁欧美| 欧美日韩国产欧美日美国产精品| 成人激情视频在线播放| 国产精品久久久久久户外露出| 高清国产一区二区三区四区五区| 国产1区2区3区精品美女| 国产成人久久精品一区二区三区| 老女人性淫交视频| 亚洲综合自拍偷拍| 亚洲深深色噜噜狠狠爱网站| 欧美日韩精品电影| 国产精品一区牛牛影视| 精品视频—区二区三区免费| 91国产丝袜在线播放| 国产色产综合产在线视频| 日本成人一级片| 国产精品人人妻人人爽人人牛| 青青操视频在线观看| 精品在线亚洲视频| 亚洲三级在线视频| 欧美三级电影在线播放| 3d动漫一区二区三区| 日本精品免费在线观看| 天干夜天天夜天干天ww| 日韩久久久久久久| 国产精品天干天干在线综合| 99热这里只有精品8| 中文字幕一区二区三区欧美日韩| 亚洲成人精品视频在线观看| 久久久免费毛片| 日韩精品中文字幕吗一区二区| 国产精品综合网站| 少妇高潮一区二区三区99小说| 亚洲精品中文字幕成人片| 亚洲国产一区二区a毛片| 日韩一区二区三| 99久久www免费| 91精品在线视频观看| 在线免费av资源| 最新欧美人z0oozo0| 亚洲精品wwww| 欧美激情一区二区三区成人| 中文字幕一区二区精品区| 中文字幕 日本| 亚洲精品www久久久| 狼狼综合久久久久综合网| 国产精品视频一二三四区| 国产视频亚洲色图| 亚洲激情中文在线| 日本天堂网在线| 六月婷婷七月丁香| 熟女视频一区二区三区| 成人免费观看男女羞羞视频| 女人偷人在线视频| 成人免费一区二区三区| 久久老女人爱爱| 懂色av一区二区三区四区五区| 能直接看的av| 国产成人精品亚洲777人妖| 欧洲生活片亚洲生活在线观看| 欧美极品欧美精品欧美| 在线播放第一页| 成人一对一视频| 国产视频一区二区三区四区五区| 免费大片黄在线观看视频网站| 国产乱子伦精品无码码专区| 中出视频在线观看| 国产乱子伦三级在线播放| 欧美成人午夜激情| 老司机精品免费视频| 日韩成人亚洲| 国产黄色录像片| 国产一级黄色电影| 久久中文精品视频| 五月天久久狠狠| 亚洲欧美日本国产专区一区| 无遮挡亚洲一区| 国产香蕉久久精品综合网| 国产一区二区免费电影| 欧美人与动牲性行为| 国产麻豆视频一区二区| 国产福利微拍精品一区二区| 男人亚洲天堂网| 一个色综合av| 熟妇熟女乱妇乱女网站| 亚洲国产1区| 三上悠亚久久精品| 精品一区二区三区的国产在线观看| 激情久久一区| 日韩欧美亚洲国产精品字幕久久久| 国产91av视频在线观看| 亚洲xxx自由成熟| 毛片视频免费| 国内外成人免费在线视频| 日日摸日日搞日日| 97久久超碰福利国产精品…| 51精品国产| av在线天堂播放| 精品久久久久99| shkd中文字幕久久在线观看| 亚洲欧美另类动漫| 色网在线播放| 色婷婷av金发美女在线播放| 精品国产91乱高清在线观看| 精品国产乱码久久久久久天美| 日本大片在线播放| 国产麻豆视频网站| 亚洲美女av黄| wwwwwxxxx日本| 国产精品毛片一区二区三区| 97久久超碰国产精品| 国产色婷婷国产综合在线理论片a| 久久久久久久久福利| 三级在线观看免费大全| 麻豆一区二区三| 日韩在线观看一区二区三区| 国产女人18毛片水真多成人如厕| 久久夜色精品国产欧美乱极品| 日韩精品久久久久久久的张开腿让| 国产精品视频一二三区| 国产一区二区欧美| 久久久无码人妻精品无码| 一区二区欧美国产| 91国内精品白嫩初高生| 一区二区三区在线免费观看| 美日韩一区二区三区| 一区二区在线视频播放| av免费在线播放网站| 刘亦菲一区二区三区免费看| 欧美 亚洲 另类 激情 另类| 午夜私人影院在线观看| 777奇米四色成人影色区| 欧美一区二区三区……| 九九精品视频免费| 国内精品第一页| 国产精品久久一区二区三区不卡| 99九九精品视频| 成人网站免费观看入口| 欧美一级黄色带| 国产精品久久久久99| www国产亚洲精品久久网站| 久久av一区二区三区亚洲| 亚洲一区电影在线观看| 亚洲九九视频| 成人免费一区二区三区牛牛| 欧美亚洲激情视频| 日本亲与子乱a| 久久99国产成人小视频| 在线区一区二视频| 新欧美整片sss第一页| 欧美日本网站| 欧美大片va欧美在线播放| 中国a一片一级一片| 亚洲欧洲在线免费| 欧美激情成人在线| 久久国产精品免费观看| a级片一区二区| 喷水一区二区三区| 免费av观看网址| 日韩中文字幕免费观看| 欧美久久久久久| 国内精品久久久久影院薰衣草| 日韩精品一区二区亚洲av| www.夜夜骑.com| 亚洲mv在线看| 国产在线观看免费视频今夜| 男人的天堂视频网站| 影音先锋国产资源| 日本一区二区三区中文字幕| 偷拍自拍一区| 久久久国产精品视频| 深夜福利一区|