Как и C, формальная грамматика Go использует точки с запятой для завершения операторов, но в отличие от C, эти точки с запятой не появляются в исходном файле. Вместо этого лексер использует простое правило для автоматической вставки точек с запятой во время сканирования, поэтому входной текст в основном не содержит их.
Правило таково. Если последний токен перед новой строкой является идентификатором (который включает в себя такие слова, как int
и float64
), базовый литерал, такой как число или строковая константа, или один из токенов
break continue fallthrough return ++ -- ) }
лексер всегда вставляет точку с запятой после токена. Это можно суммировать как, "если новая строка идет после токена, который может завершить оператор, введите точку с запятой".
Точка с запятой также может быть опущена непосредственно перед закрывающей скобкой, поэтому такое выражение, как
go func() { for { dst <- <-src } }()
не нуждается в точках с запятой. Идиоматичные Go программы имеют точки с запятой только в таких местах, как условия цикла for
для разделения инициализатора, условия и элементы продолжения. Они также необходимы для разделения нескольких операторов в строке, если вы пишете код таким образом.
Одно из следствий правил вставки точек с запятой является то, что вы не можете поставить открывающую скобку управляющей структуры (if
, for
, switch
, или select
) в следующей строке. Если вы cделаете так, точка с запятой будет вставлена перед скобкой, что может привести к нежелательным последствия. Следует писать следующим образом:
if i < f() {
g()
}
А не таким образом:
if i < f() // неверно!
{ // неверно!
g()
}
Читайте также:
Комментариев нет:
Отправить комментарий