我了解 Go 接口的一般概念。但是,我最近正在研究實現(xiàn)該io.Reader接口,這讓我感到困惑。我發(fā)現(xiàn)這篇文章并沒有太大幫助。首先,接受的答案是 usingio.Reader的Read函數(shù),據(jù)我所知從未實現(xiàn)過。其次,Read函數(shù)在類似ioutil.ReadAll. 它需要一些實現(xiàn)io.Reader接口的東西并返回一個字節(jié)片。我不明白只返回一個int和的東西是如何err被處理成一個字節(jié)片的。編輯:我在 go-nuts IRC 頻道中得到了幫助,這是關(guān)于您可能如何實際實現(xiàn)一個http://play.golang.org/p/ejpUVOx8jR的提供的答案。非常感謝 Go 社區(qū)。編輯2:正如下面所指出的,在 strign 大于緩沖區(qū)的情況下,上面的實現(xiàn)將失敗。這是一個更理智的實現(xiàn)http://play.golang.org/p/t4Zg8TnF33。
3 回答

達(dá)令說
TA貢獻(xiàn)1821條經(jīng)驗 獲得超6個贊
您傳遞Read
字節(jié)切片。Read
應(yīng)該把字節(jié)放在里面。由于切片只是對數(shù)組的引用,更改切片的內(nèi)容會更改底層數(shù)組,因此 的調(diào)用者Read
可以只檢查它傳遞給它的切片。
ioutil.ReadAll
創(chuàng)建一個緩沖區(qū)并調(diào)用ReadFrom
它。重復(fù)ReadFrom
調(diào)用Read
,增加緩沖區(qū)的大小,直到Read
通過返回io.EOF
錯誤來告訴它已耗盡。自己看看。
您鏈接的答案確實實現(xiàn)了該io.Reader
接口。它正在聲明一個方法Read(p []byte) (n int, e error)
。這就是所需要的。
- 3 回答
- 0 關(guān)注
- 226 瀏覽
添加回答
舉報
0/150
提交
取消