Ответ на комментарий от Difrex
> А почему так? Я код не хочу ща читать - лень, но ты разве не разбираешь ответ в слайс? Типа,Почему так, вопрос, который я тоже могу задать: "Разве ты не делаешь просто Printf каждого из id? Зачем вырезать последний \n?
Дело в том, что я старался писать строго. Строка с переводом строки - это однозаначность. Например, пустая строка - это тоже пустая строка и \n.
В системе, когда у нас последняя строка не содержит \n, мы не можем отличить ситуацию, прочиталась ли строка целиком?
Например, вот функция, которая используется везде при работе с сетью:
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 быть должен, но в как бы мы не решили, это должно быть прописано в стандарте, кмк.
hugeping (2020-09-14 09:11:34)
[Ответить]