在Go中获取请求(获取几行)

KD1*_*157 0 regex io http go

我需要在go lang中只获得a )请求的前几行.http.Get(<url>是否有任何方法可以做到.我不需要整个响应.我需要匹配一个只在前几行中存在的模式.获取整个响应并获得正则表达式使得它非常慢,因为响应中的字符数非常大.这是最快的方法.目前我在做

http.Get(<url>) 
Run Code Online (Sandbox Code Playgroud)

//返回一个响应

ioutil.readAll(response of the above url)
Run Code Online (Sandbox Code Playgroud)

//返回一个字节数组

 MyFunction(search for reg exp in the byte array)
Run Code Online (Sandbox Code Playgroud)

有没有任何方法可以获取几行或避免获取整个响应并匹配模式.

Jim*_*imB 6

不要使用ReadAll,只需读取一个你知道足够大的块来捕获你想要的部分请求

// response must be in the first 2048 bytes
buf := make([]byte, 2048)
n, err := resp.Body.Read(buf)
MyFunction(buf[:n])
Run Code Online (Sandbox Code Playgroud)

或通过 io.LimitedReader

buf, err := ioutil.ReadAll(io.LimitReader(resp.Body, 2048))
Run Code Online (Sandbox Code Playgroud)

或者,如果你真的需要通过线读,a bufio.Scanner

scanner := bufio.NewScanner(resp.Body)
for i := 0; i < fewLines && scanner.Scan(); i++ {
    MyFunction(scanner.Bytes())
}
Run Code Online (Sandbox Code Playgroud)

但是请注意,如果你不读完响应主体,它会阻止你的客户重用的连接,如果有大量的输入数据的服务器可能不喜欢你经常早关闭连接.