我需要在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)
有没有任何方法可以获取几行或避免获取整个响应并匹配模式.
不要使用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)
但是请注意,如果你不读完响应主体,它会阻止你的客户重用的连接,如果有大量的输入数据的服务器可能不喜欢你经常早关闭连接.
| 归档时间: |
|
| 查看次数: |
937 次 |
| 最近记录: |