原因: ReadSeeker 封裝了Seek()方法,這個方法要求資源的任何位置都能被定位,例如存儲在磁盤里文件,你可以隨時讀取文件的任意位置。而response.Body 是通過TCP連接從網絡中讀取數據,這些數據沒有被存儲,並且數據發送者不會再次發送數據給你,因此 response.Body 沒有實現 io.Seeker 方法。
方法:基於以上分析,對於一些像 response.Body類型的 io.ReadCloser,將它轉化為 ReadSeeker的方法就是先將 io.ReadCloser 全部讀取到內存中,利用 ioutil.ReadAll() 方法,然后利用 bytes.NewReader() 方法就可以從[]byte中獲得 io.ReadSeeker
它的缺點就是所有的內容都需要存儲在內存中,這樣會造成內存損耗。