欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言的io輸入輸出流方式

 更新時間:2024年10月19日 10:55:53   作者:xvwen  
Go語言中,輸入輸出流的處理通過io庫中的Reader和Writer接口來實現(xiàn),Reader接口定義了Read方法,用于從流中讀取數(shù)據(jù)到程序中,Writer接口定義了Write方法,用于將數(shù)據(jù)寫入到底層的數(shù)據(jù)流中,這些接口被許多標(biāo)準(zhǔn)庫的類型所實現(xiàn)

Go語言的io輸入輸出流

Go語言的輸入輸出流不如其他語言那么直觀,由于是通過實現(xiàn)接口方法的隱式繼承所以比較抽象,今天具體介紹一下go語言的輸入輸出流。

go語言輸入輸出在io庫中

使用Reader接口,如下:

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

Read方法從流中讀取長度為len(p)字節(jié)數(shù)據(jù)寫入p。也就是使用Read方法可以將流讀到p中,從而從流中到程序中。

當(dāng)Read在讀取n > 0個字節(jié)后遭遇錯誤或者到達(dá)文件結(jié)尾時,會返回讀取的字節(jié)數(shù)。它可能會在該次調(diào)用返回一個非nil的錯誤,或者在下一次調(diào)用時返回0和該錯誤

  • io.Reader 是一個基本的接口,用于表示數(shù)據(jù)的讀取。它只有一個方法 Read
  • io.ReadFull從 io.Reader 中精確讀取 len(buf) 字節(jié)的數(shù)據(jù)。

Writer接口是寫入流接口,如下:

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

Write方法將len(p) 字節(jié)數(shù)據(jù)從p寫入底層的數(shù)據(jù)流。

它會返回寫入的字節(jié)數(shù)(0 <= n <= len(p))和遇到的任何導(dǎo)致寫入提取結(jié)束的錯誤。Write必須返回非nil的錯誤,如果它返回的 n < len(p)。Write不能修改切片p中的數(shù)據(jù),即使臨時修改也不行。

  • io.Writer 是一個基本的接口,用于表示數(shù)據(jù)的寫入。它只有一個方法 Write
  • io.WriteStringio.Writer 寫入字符串。

流復(fù)制,從輸出流復(fù)制到輸出流,如下:

func Copy(dst Writer, src Reader) (written int64, err error)

上述只是輸入輸出流的基本用法

還有許多繼承類,如下:

  • os.File 同時實現(xiàn)了 io.Reader 和 io.Writer
  • strings.Reader 實現(xiàn)了 io.Reader
  • bufio.Reader/Writer 分別實現(xiàn)了 io.Reader 和 io.Writer
  • bytes.Buffer 同時實現(xiàn)了 io.Reader 和 io.Writer
  • bytes.Reader 實現(xiàn)了 io.Reader
  • compress/gzip.Reader/Writer 分別實現(xiàn)了 io.Reader 和 io.Writer
  • crypto/cipher.StreamReader/StreamWriter 分別實現(xiàn)了 io.Reader 和 io.Writer
  • crypto/tls.Conn 同時實現(xiàn)了 io.Reader 和 io.Writer
  • encoding/csv.Reader/Writer 分別實現(xiàn)了 io.Reader 和 io.Writer
  • mime/multipart.Part 實現(xiàn)了 io.Reader
  • net/conn 分別實現(xiàn)了 io.Reader 和 io.Writer(Conn接口定義了Read/Write)

上述包和結(jié)構(gòu)體都實現(xiàn)了io.Reader方法,因此都可以使用Read方法將流讀取到程序中。

常用的類型有

os.File、strings.Reader、bufio.Reader/Writer、bytes.Buffer、bytes.Reader

可以看到直接獲取字節(jié)流的ReadFile方法也是調(diào)用了Read方法,如下:

在strings的也存在Reader接口,看源碼如下:

等等其他幾個接口也是如此,在未被封裝的時候都是調(diào)用Read方法。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Golang語言JSON解碼函數(shù)Unmarshal的使用

    Golang語言JSON解碼函數(shù)Unmarshal的使用

    本文主要介紹了Golang語言JSON解碼函數(shù)Unmarshal的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • go語言實現(xiàn)猜數(shù)字小游戲的方法

    go語言實現(xiàn)猜數(shù)字小游戲的方法

    這篇文章主要介紹了go語言實現(xiàn)猜數(shù)字小游戲的方法,實例分析了Go語言流程判斷與處理的技巧,需要的朋友可以參考下
    2015-03-03
  • 詳解Golang函數(shù)式選項(Functional?Options)模式

    詳解Golang函數(shù)式選項(Functional?Options)模式

    什么是函數(shù)式選項模式,為什么要這么寫,這個編程模式解決了什么問題呢?其實就是為了解決動態(tài)靈活的配置不同的參數(shù)的問題。下面通過本文給大家介紹Golang函數(shù)式選項(Functional?Options)模式的問題,感興趣的朋友一起看看吧
    2021-12-12
  • golang中net的tcp服務(wù)使用

    golang中net的tcp服務(wù)使用

    這篇文章主要介紹了golang中net的tcp服務(wù)使用,文章通過服務(wù)端監(jiān)聽端口 展開主題的詳細(xì)內(nèi)容,具有一定的參考價值,需要的 小伙伴可以參考一下
    2022-04-04
  • 詳解Go語言中空結(jié)構(gòu)體的慣用法

    詳解Go語言中空結(jié)構(gòu)體的慣用法

    空結(jié)構(gòu)體在 Go 編程中有著廣泛的應(yīng)用,本文將詳細(xì)探討空結(jié)構(gòu)體的幾種典型用法,并解釋為何它們在特定場景下非常有用,希望對大家有所幫助
    2024-11-11
  • GO語言映射(Map)用法分析

    GO語言映射(Map)用法分析

    這篇文章主要介紹了GO語言映射(Map)用法,以實例形式較為詳細(xì)的分析了針對映射的創(chuàng)建、填充、遍歷及修改等操作的技巧,需要的朋友可以參考下
    2014-12-12
  • Go語言實現(xiàn)簡單留言板的方法

    Go語言實現(xiàn)簡單留言板的方法

    這篇文章主要介紹了Go語言實現(xiàn)簡單留言板的方法,涉及數(shù)據(jù)庫、模板頁面元素等留言板相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • golang testing使用示例小結(jié)

    golang testing使用示例小結(jié)

    golang自帶了testing測試包,使用該包可以進(jìn)行自動化的單元測試,輸出結(jié)果驗證,并且可以測試性能,下面通過示例代碼給大家講解golang testing使用示例小結(jié),感興趣的朋友一起看看吧
    2024-05-05
  • mac下安裝golang框架iris的方法

    mac下安裝golang框架iris的方法

    這篇文章主要介紹了mac下安裝golang框架iris的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Golang unsafe包中的類型和函數(shù)詳解

    Golang unsafe包中的類型和函數(shù)詳解

    Golang中的unsafe包用于在運行時進(jìn)行低級別的操作,這些操作通常是不安全的,因為可以打破Golang的類型安全性和內(nèi)存安全性,使用 unsafe包的程序可能會影響可移植性和兼容性,接下來看下unsafe包中的類型和函數(shù)
    2023-08-08

最新評論