почему строгий формат кода по ключевым словам в go lang - PullRequest
0 голосов
/ 21 января 2020

Как и каждый новый программист, начиная с Go 1-й, вы видите строгий формат кода. Означает:

//Valid
func foo(){
}

//Invalid
func foo()
{
}

То же самое относится к if-else, что еще должно быть в той же строке, где, если заканчивается, например:

//Valid
if{
}else{
}

//Invalid
if{
}
else{
}

, мы получаем ошибку ниже:

syntax error: unexpected else, expecting }

Я проверил спец. c спец. c, но не смог найти почему.

Единственное объяснение, которое я получаю, это обязательный .

Может кто-нибудь объяснить нам, почему это необходимо, имеет ли это какую-то причину? если есть

ОБНОВЛЕНИЕ
Мне кажется, я уже упоминал об этом, что "Я знаю, что я говорю, так сказать", Вопрос в ПОЧЕМУ? Зачем go этой длины, чтобы сделать его ошибкой во время компиляции, какие проблемы это создавало, если мы этого не делаем?

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Язык был задуман как таковой, и причина изложена в FAQ.

https://golang.org/doc/faq

Почему существуют фигурные скобки, но нет точек с запятой? И почему я не могу поставить открывающую скобку на следующей строке?

o использует скобки для группировки операторов - синтаксис, знакомый программистам, работавшим с любым языком в C семья. Точки с запятой, однако, предназначены для парсеров, а не для людей, и мы хотели как можно больше их исключить. Для достижения этой цели Go заимствует уловку из BCPL: точки с запятой, которые разделяют операторы, находятся в формальной грамматике, но вводятся автоматически, без предварительного просмотра, лексером в конце любой строки, которая может быть концом оператора. Это работает очень хорошо на практике, но имеет эффект, что это заставляет стиль скобки. Например, открывающая фигурная скобка функции не может появляться в строке сама по себе.

Некоторые утверждают, что лексеру следует обратиться к ним заранее, чтобы разрешить фигурной скобке жить на следующей строке. Мы не согласны. Поскольку код Go предназначен для автоматического форматирования gofmt, необходимо выбрать какой-либо стиль. Этот стиль может отличаться от того, что вы использовали в C или Java, но Go - это другой язык, и стиль gofmt такой же хороший, как и любой другой. Более важно - гораздо более важно - преимущества единого, программно утвержденного формата для всех Go программ значительно перевешивают любые предполагаемые недостатки конкретного стиля. Также обратите внимание, что стиль Go означает, что интерактивная реализация Go может использовать стандартный синтаксис по одной строке за раз без специальных правил.

1 голос
/ 21 января 2020

Go вставки; в конце строк, заканчивающихся определенными токенами, включая}. Так как, если {...} else {...} является одним оператором, вы не можете поставить точку с запятой в середине после первой закрывающей дроби т.е.}, следовательно, требование поставить} else {в одну строку обязательно.

Надеюсь, это ответит на ваш вопрос.

...