扣丁學堂區塊鏈GO語言開發之io包使用詳解

扣丁学堂区块链GO语言开发之io包使用详解

今天扣丁學堂區塊鏈培訓老師給大家介紹一下關於Go語言中io包的使用,首先Go是谷歌2009發佈的第二款編程語言。2009年7月份,谷歌曾發佈了Simple語言,它是用來開發Android應用它是用來開發Android應用的一種BASIC語言。很多人喜歡Go語言,其實是因為Go語言有其獨特的語言屬性在支撐著其在編程語言界的發展,下面我們一起來看一下吧。

扣丁学堂区块链GO语言开发之io包使用详解

io包為I/O原語提供了基礎的接口.它主要包裝了這些原語的已有實現,如os包中的那些,抽象成函數性的共享公共接口,加上一些其它相關的原語,由於這些接口和原語以不同的實現包裝了低級操作,因此除非另行通知,否則客戶不應假定它們對於並行執行是安全的。

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

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

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

Read將len(p)個字節讀取到p中。它返回讀取的字節數n(當Read在成功讀取n>0個字節後遇到一個錯誤或EOF情況,它就會返回讀取的字節數。它會從相同的調用中返回(非nil的)錯誤或從隨後的調用中返回錯誤(和n==0)。這種一般情況的一個例子就是Reader在輸入流結束時會返回一個非零的字節數,可能的返回不是err==EOF就是err==nil。無論如何,下一個Read都應當返回0,EOF。

調用者應當總在考慮到錯誤err前處理n>0的字節。這樣做可以在讀取一些字節,以及允許的EOF行為後正確地處理I/O錯誤。

Read的實現會阻止返回零字節的計數和一個nil錯誤,調用者應將這種情況視作空操作。

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

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

Write將len(p)個字節從p中寫入到基本數據流中。它返回從p中被寫入的字節數n(0

Io包中的函數(方法):

funcReadFull(rReader,bufbyte)(nint,errerror)

這個函數可以把對象r中的數據讀出來,然後存入一個緩衝區buf中,以便其它代碼可以處理buf中的數據。

這裡有個問題,ReadFull函數究竟可以讀取哪些對象的數據?可以讀文件中的數據嗎?可以讀網絡中的數據嗎?可以讀數據庫中的數據嗎?可以讀磁盤中的扇區嗎?可以讀內存中的數據嗎?

答案是ReadFull可以讀取任何對象的數據,但是有個前提,就是這個對象必須符合Reader的標準。

Reader的標準是什麼呢?下面是Reader的定義:

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

從上面的定義可以看出,Reader的標準很簡單,只要某個對象實現了Read方法,這個對象就符合了Reader的標準,就可以被ReadFull讀取。

太簡單了,只需要實現Read方法,不需要做其它任何事情。下面我們就來定義一個自己的類型,然後實現Read方法:

  //定義一個Ustr類型(以string為基類型)
  typeUstrstring
  //實現Ustr類型的Read方法
  func(sUstr)Read(pbyte)(nint,errerror){
  i,ls,lp:=0,len(s),len(p)
  for;i
  //將小寫字母轉換為大寫字母,然後寫入p中
  ifs[i]>='a'&&s[i]
  p[i]=s[i]+'A'-'a'
  }else{
  p[i]=s[i]
  }
  }
  //根據讀取的字節數設置返回值
  switchi{
  caselp:
  returni,nil
  casels:
  returni,io.EOF
  default:
  returni,errors.New("ReadFail")
  }
  }

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

  funcmain{

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

  buf:=make(byte,32)//創建緩衝區buf

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

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

  //HELLOWORLD!

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

  //12unexpectedEOF

  }

我們很快就實現了Reader的要求,這個Reader就是一個接口,接口就是一個標準,一個要求,一個規定,這個規定就是“要實現接口中的方法”。只要某個對象符合Reader接口的要求,那麼這個對象就可以當作Reader接口來使用,就可以傳遞給ReadFull方法。

所以,只要文件對象實現了Read方法,那麼ReadFull就可以讀取文件中的數據,只要網絡對象實現了Read方法,ReadFull就可以讀取網絡中的數據,只要數據庫實現了Read方法,ReadFull就可以讀取數據庫中的數據,只要磁盤對象實現了Read方法,ReadFull就可以讀磁盤中的數據,只要內存對象實現了Read方法,ReadFull就可以讀取內存中的數據,只要任何一個對象實現了Read方法,ReadFull就可以讀取該對象的數據。

以上就是關於扣丁學堂區塊鏈培訓Go語言中io包使用的詳細介紹,希望容對大家學習區塊鏈開發有所幫助,想要了解更多關於區塊鏈方面內容的小夥伴可以登錄扣丁學堂官網諮詢,此外扣丁學堂區塊鏈視頻教程80%供學員免費在線觀看,想要學習區塊鏈的小夥伴快到扣丁學堂報名吧。

標籤: 區塊鏈培訓 區塊鏈技術 區塊鏈開發 區塊鏈視頻教程 比特幣 以太坊


分享到:


相關文章: