Стартовая страница

# Difrex to hugeping @ Re: Что с станцией lessmore? @ idec.talks 14/09/20 07:57

> Мне не сложно подправить, но это именно будет хак. Дополнительный блок условный.
А почему так? Я код не хочу ща читать - лень, но ты разве не разбираешь ответ в слайс? Типа,

====
messages := make(map[string][]string)
echoList := strings.Split(getBody(resp.Body))
var currentEcho string
for i := range echoList {
if echoList[i] == "" {
continue
}
if isEcho(echoList[i]) {
currentEcho = echoList[i]
}
if isMessage(echoList[i]) {
messages[currentEcho] = append(messages[currentEcho], echoList[i])
}
}
====




# hugeping to Difrex @ Re: Что с станцией lessmore? @ idec.talks 14/09/20 09:11

> А почему так? Я код не хочу ща читать - лень, но ты разве не разбираешь ответ в слайс? Типа,

Почему так, вопрос, который я тоже могу задать: "Разве ты не делаешь просто 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 быть должен, но в как бы мы не решили, это должно быть прописано в стандарте, кмк.