在Go中使用io.LimitedReader限制读取字节数的教程

527 阅读1分钟

有些情况下,你想限制读取的字节数,例如,从服务器响应或文件中读取。在这种情况下,你可以在读取过程中计算字节数,并在适当的时候停止这个过程。然而,在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.LimitedReader14 行中,我们创建了一个新的 io.Reader和要读取的字节数作为参数。因此,当从这个流中读取数据时,我们将不会得到超过设定数量的N 字节。