Объявление (declaration) связывает непустой идентификатор с константой, типом, переменной, функцией, меткой (label) или пакетом. Каждый идентификатор в программе должен быть объявлен. Ни один идентификатор не может быть объявлен дважды в одном и том же блоке, и ни один идентификатор не может быть объявлен как в блоке файла, так и в блоке пакета.
Пустой идентификатор ( _ , знак нижнего подчеркивания) может использоваться как любой другой идентификатор в объявлении, но он не вводит привязку и, следовательно, не объявляется. В блоке пакета идентификатор init может использоваться только для объявлений функции init, и, подобно пустому идентификатору, он не вводит новую привязку.
Declaration = ConstDecl | TypeDecl | VarDecl .
TopLevelDecl = Declaration | FunctionDecl | MethodDecl .
Область видимости объявленного идентификатора - это объем исходного текста кода, в котором идентификатор обозначает указанную константу, тип, переменную, функцию, метку или пакет.
Go имеет лексическую область видимости, используя блоки:
- Область видимости предварительно объявленного идентификатора - это всеобщий блок (universe block).
- Область видимости идентификатора, обозначающего константу, тип, переменную или функцию (но не метод), объявленную на верхнем уровне (вне какой-либо функции), это блок пакета.
- Область видимости имени импортируемого пакета - это блок файла, содержащий объявление импорта.
- Область видимости идентификатора, обозначающего приемник метода (method receiver), параметра функции или переменной результата, это тело функции.
- Область видимости идентификатора константы или переменной, объявленного внутри функции, начинается в конце ConstSpec или VarSpec (ShortVarDecl для коротких объявлений переменных) и заканчивается в конце самого внутреннего содержащего блока.
- Область видимости идентификатора типа, объявленного внутри функции, начинается с идентификатора в TypeSpec и заканчивается в конце самого внутреннего содержащего блока.
- Идентификатор, объявленный в блоке, может быть повторно объявлен во внутреннем блоке. Пока идентификатор внутренней декларации находится в области видимости, он обозначает сущность, объявленную внутренней декларацией.
Границы пакета не являются декларацией; имя пакета не отображается ни в одной области видимости. Его цель - идентифицировать файлы, принадлежащие одному и тому же пакету, и указать имя пакета по умолчанию для объявлений импорта.
Области видимости меток (label)
Метки (labels) объявляются помеченными операторами (labeled statements) и используются в операторах "break", "continue" и "goto". Недопустимо определять метку, которая никогда не используется. В отличие от других идентификаторов, метки не имеют блочной области видимости и не конфликтуют с идентификаторами, которые не являются метками. Область видимости метки - это тело функции, в которой она объявлена, исключая тело любой вложенной функции.
Читайте также:
Комментариев нет:
Отправить комментарий