欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂區(qū)塊鏈GO語言開發(fā)之io包使用詳解

2018-09-07 14:31:53 1387瀏覽

今天扣丁學(xué)堂區(qū)塊鏈培訓(xùn)老師給大家介紹一下關(guān)于Go語言中io包的使用,首先Go是谷歌2009發(fā)布的第二款編程語言。2009年7月份,谷歌曾發(fā)布了Simple語言,它是用來開發(fā)Android應(yīng)用它是用來開發(fā)Android應(yīng)用的一種BASIC語言。很多人喜歡Go語言,其實(shí)是因?yàn)镚o語言有其獨(dú)特的語言屬性在支撐著其在編程語言界的發(fā)展,下面我們一起來看一下吧。



io包為I/O原語提供了基礎(chǔ)的接口.它主要包裝了這些原語的已有實(shí)現(xiàn),如os包中的那些,抽象成函數(shù)性的共享公共接口,加上一些其它相關(guān)的原語,由于這些接口和原語以不同的實(shí)現(xiàn)包裝了低級操作,因此除非另行通知,否則客戶不應(yīng)假定它們對于并行執(zhí)行是安全的。

在io包中最重要的是兩個(gè)接口:Reader和Writer接口,首先來介紹這兩個(gè)接口:

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

Reader接口包裝了基本的Read方法。

Read將len(p)個(gè)字節(jié)讀取到p中。它返回讀取的字節(jié)數(shù)n(當(dāng)Read在成功讀取n>0個(gè)字節(jié)后遇到一個(gè)錯(cuò)誤或EOF情況,它就會返回讀取的字節(jié)數(shù)。它會從相同的調(diào)用中返回(非nil的)錯(cuò)誤或從隨后的調(diào)用中返回錯(cuò)誤(和n==0)。這種一般情況的一個(gè)例子就是Reader在輸入流結(jié)束時(shí)會返回一個(gè)非零的字節(jié)數(shù),可能的返回不是err==EOF就是err==nil。無論如何,下一個(gè)Read都應(yīng)當(dāng)返回0,EOF。

調(diào)用者應(yīng)當(dāng)總在考慮到錯(cuò)誤err前處理n>0的字節(jié)。這樣做可以在讀取一些字節(jié),以及允許的EOF行為后正確地處理I/O錯(cuò)誤。

Read的實(shí)現(xiàn)會阻止返回零字節(jié)的計(jì)數(shù)和一個(gè)nil錯(cuò)誤,調(diào)用者應(yīng)將這種情況視作空操作。

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

Writer接口包裝了基本的Write方法。

Write將len(p)個(gè)字節(jié)從p中寫入到基本數(shù)據(jù)流中。它返回從p中被寫入的字節(jié)數(shù)n(0

Io包中的函數(shù)(方法):

funcReadFull(rReader,bufbyte)(nint,errerror)

這個(gè)函數(shù)可以把對象r中的數(shù)據(jù)讀出來,然后存入一個(gè)緩沖區(qū)buf中,以便其它代碼可以處理buf中的數(shù)據(jù)。

這里有個(gè)問題,ReadFull函數(shù)究竟可以讀取哪些對象的數(shù)據(jù)?可以讀文件中的數(shù)據(jù)嗎?可以讀網(wǎng)絡(luò)中的數(shù)據(jù)嗎?可以讀數(shù)據(jù)庫中的數(shù)據(jù)嗎?可以讀磁盤中的扇區(qū)嗎?可以讀內(nèi)存中的數(shù)據(jù)嗎?

答案是ReadFull可以讀取任何對象的數(shù)據(jù),但是有個(gè)前提,就是這個(gè)對象必須符合Reader的標(biāo)準(zhǔn)。

Reader的標(biāo)準(zhǔn)是什么呢?下面是Reader的定義:

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

從上面的定義可以看出,Reader的標(biāo)準(zhǔn)很簡單,只要某個(gè)對象實(shí)現(xiàn)了Read方法,這個(gè)對象就符合了Reader的標(biāo)準(zhǔn),就可以被ReadFull讀取。

太簡單了,只需要實(shí)現(xiàn)Read方法,不需要做其它任何事情。下面我們就來定義一個(gè)自己的類型,然后實(shí)現(xiàn)Read方法:
  //定義一個(gè)Ustr類型(以string為基類型)
  typeUstrstring
  //實(shí)現(xiàn)Ustr類型的Read方法
  func(sUstr)Read(pbyte)(nint,errerror){
  i,ls,lp:=0,len(s),len(p)
  for;i
  //將小寫字母轉(zhuǎn)換為大寫字母,然后寫入p中
  ifs[i]>='a'&&s[i]
  p[i]=s[i]+'A'-'a'
  }else{
  p[i]=s[i]
  }
  }
  //根據(jù)讀取的字節(jié)數(shù)設(shè)置返回值
  switchi{
  caselp:
  returni,nil
  casels:
  returni,io.EOF
  default:
  returni,errors.New("ReadFail")
  }
  }

接下來,我們就可以用ReadFull方法讀取Ustr對象的數(shù)據(jù)了:

  funcmain{

  us:=Ustr("HelloWorld!")//創(chuàng)建Ustr對象us

  buf:=make(byte,32)//創(chuàng)建緩沖區(qū)buf

  n,err:=io.ReadFull(us,buf)//將us中的數(shù)據(jù)讀取到buf中

  fmt.Printf("%s\n",buf)//顯示buf中的內(nèi)容

  //HELLOWORLD!

  fmt.Println(n,err)//顯示返回值

  //12unexpectedEOF

  }

我們很快就實(shí)現(xiàn)了Reader的要求,這個(gè)Reader就是一個(gè)接口,接口就是一個(gè)標(biāo)準(zhǔn),一個(gè)要求,一個(gè)規(guī)定,這個(gè)規(guī)定就是“要實(shí)現(xiàn)接口中的方法”。只要某個(gè)對象符合Reader接口的要求,那么這個(gè)對象就可以當(dāng)作Reader接口來使用,就可以傳遞給ReadFull方法。

所以,只要文件對象實(shí)現(xiàn)了Read方法,那么ReadFull就可以讀取文件中的數(shù)據(jù),只要網(wǎng)絡(luò)對象實(shí)現(xiàn)了Read方法,ReadFull就可以讀取網(wǎng)絡(luò)中的數(shù)據(jù),只要數(shù)據(jù)庫實(shí)現(xiàn)了Read方法,ReadFull就可以讀取數(shù)據(jù)庫中的數(shù)據(jù),只要磁盤對象實(shí)現(xiàn)了Read方法,ReadFull就可以讀磁盤中的數(shù)據(jù),只要內(nèi)存對象實(shí)現(xiàn)了Read方法,ReadFull就可以讀取內(nèi)存中的數(shù)據(jù),只要任何一個(gè)對象實(shí)現(xiàn)了Read方法,ReadFull就可以讀取該對象的數(shù)據(jù)。

以上就是關(guān)于扣丁學(xué)堂區(qū)塊鏈培訓(xùn)Go語言中io包使用的詳細(xì)介紹,希望容對大家學(xué)習(xí)區(qū)塊鏈開發(fā)有所幫助,想要了解更多關(guān)于區(qū)塊鏈方面內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢,此外扣丁學(xué)堂區(qū)塊鏈視頻教程80%供學(xué)員免費(fèi)在線觀看,想要學(xué)習(xí)區(qū)塊鏈的小伙伴快到扣丁學(xué)堂報(bào)名吧。


【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】

 

查看更多關(guān)于區(qū)塊鏈培訓(xùn)技術(shù)資訊的相關(guān)文章>>

標(biāo)簽: 區(qū)塊鏈培訓(xùn) 區(qū)塊鏈技術(shù) 區(qū)塊鏈開發(fā) 區(qū)塊鏈視頻教程 比特幣 以太坊

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部