GO --- 將Reader 或者 ReadCloser 轉化為 ReadSeeker


原因: ReadSeeker 封裝了Seek()方法,這個方法要求資源的任何位置都能被定位,例如存儲在磁盤里文件,你可以隨時讀取文件的任意位置。而response.Body 是通過TCP連接從網絡中讀取數據,這些數據沒有被存儲,並且數據發送者不會再次發送數據給你,因此 response.Body 沒有實現 io.Seeker 方法。


方法:基於以上分析,對於一些像 response.Body類型的 io.ReadCloser,將它轉化為 ReadSeeker的方法就是先將 io.ReadCloser 全部讀取到內存中,利用 ioutil.ReadAll() 方法,然后利用 bytes.NewReader() 方法就可以從[]byte中獲得 io.ReadSeeker


它的缺點就是所有的內容都需要存儲在內存中,這樣會造成內存損耗。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM