有些情况下,你想限制读取的字节数,例如,从服务器响应或文件中读取。在这种情况下,你可以在读取过程中计算字节数,并在适当的时候停止这个过程。然而,在Go中还有更简单的方法。使用 io.LimitedReader封装器,你可以从底层阅读器中读取设定的字节数,而无需修改读取代码,因为它创建了一个新的 io.Reader限于固定数量的N 字节。
package main
import (
"fmt"
"io"
"io/ioutil"
"log"
"strings"
)
func main() {
r := strings.NewReader("https://gosamples.dev")
limitedReader := &io.LimitedReader{R: r, N: 8}
body, err := ioutil.ReadAll(limitedReader)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
}
输出
https://
看一下这个例子。在main() 函数中,我们初始化了一个简单的 strings.Reader其中包含一个URL,我们想从其中读取前8个字节。要做到这一点,我们在 中创建一个新的 io.LimitedReader在14 行中,我们创建了一个新的 io.Reader和要读取的字节数作为参数。因此,当从这个流中读取数据时,我们将不会得到超过设定数量的N 字节。