我需要在go lang中只获得a )请求的前几行.http.Get(
是否有任何方法可以做到.我不需要整个响应.我需要匹配一个只在前几行中存在的模式.获取整个响应并获得正则表达式使得它非常慢,因为响应中的字符数非常大.这是最快的方法.目前我在做
http.Get()
//返回一个响应
ioutil.readAll(response of the above url)
//返回一个字节数组
MyFunction(search for reg exp in the byte array)
有没有任何方法可以获取几行或避免获取整个响应并匹配模式.
不要使用ReadAll
,只需读取一个你知道足够大的块来捕获你想要的部分请求
// response must be in the first 2048 bytes buf := make([]byte, 2048) n, err := resp.Body.Read(buf) MyFunction(buf[:n])
或通过 io.LimitedReader
buf, err := ioutil.ReadAll(io.LimitReader(resp.Body, 2048))
或者,如果你真的需要通过线读,a bufio.Scanner
scanner := bufio.NewScanner(resp.Body) for i := 0; i < fewLines && scanner.Scan(); i++ { MyFunction(scanner.Bytes()) }
但是请注意,如果你不读完响应主体,它会阻止你的客户重用的连接,如果有大量的输入数据的服务器可能不喜欢你经常早关闭连接.