Структурировать для инициализатора цикла
Любая идея, почему это выражение структуры в для инициализатора цикла делает синтаксическую ошибку во время компиляции? Указатель на структуру отлично работает в этом случае, но, конечно, мне нужна локальная переменная, как показано ниже. Спасибо за советы!
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
}