func http_req_lines(url string, fn func(string) bool) error {====
resp, err := http.Get(url)
if err != nil {
return err
}
defer resp.Body.Close()
reader := bufio.NewReader(resp.Body)
for {
line, err := reader.ReadString('\n')
if err != nil && err != io.EOF {
return err
}
line = strings.TrimSuffix(line, "\n")
if err == io.EOF {
break
}
if !fn(line) {
break
}
}
return nil
}
Обрати внимание, что if err === io.EOF стоит ПЕРЕД fn(line).
А вот правка, чтоб сработало с твоей нодой:
if err == io.EOF {====
if line != "" { /* no eol in last line? broken node? */
fn(line)
}
break
}
Если же я перенесу fn(line) перед err == io.EOF, то fn(line) будет вызываться для последнего \n у других нод, которые делают \n в каждой строке.
Я лично считаю, что \n быть должен, но в как бы мы не решили, это должно быть прописано в стандарте, кмк.