Структурировать для инициализатора цикла

Любая идея, почему это выражение структуры в для инициализатора цикла делает синтаксическую ошибку во время компиляции? Указатель на структуру отлично работает в этом случае, но, конечно, мне нужна локальная переменная, как показано ниже. Спасибо за советы!

type Request struct {
    id   int
    line []byte
    err  error
}

go func() {
    for r := Request{}; r.err == nil; r.id++ {
        r.line, r.err = input.ReadSlice(0x0a)
        channel <- r
    }
}()

1 ответ

Решение

Упрощение вашего кода:

for r := Request{}; r.err == nil; r.id++ {
    r.line, r.err = input.ReadSlice(0x0a)
    channel <- r
}

Выдает ошибку времени компиляции:

ожидаемое логическое или диапазонное выражение, найдено простое утверждение (отсутствуют круглые скобки вокруг составного литерала?) (и еще 1 ошибка)

Эта конструкция неоднозначна для анализа. Открывающая скобка '{' не очевидно, является ли это частью составного литерала или открывающей скобки for Само заявление (for блок).

Вы можете сделать это очевидным, используя круглые скобки вокруг составного литерала (как предполагает ошибка):

for r := (Request{}); r.err == nil; r.id++ {
    r.line, r.err = input.ReadSlice(0x0a)
    channel <- r
}
Другие вопросы по тегам