MyTetra Share
Делитесь знаниями!
Области видимости в Golang
Время создания: 12.11.2020 23:14
Автор: br0ke
Текстовые метки: go, golang, scope, visibility, shadow, shadowing
Раздел: Информационные технологии - Golang
Запись: and-semakin/mytetra_data/master/base/16052048586nxg13jid6/text.html на raw.githubusercontent.com

В Go область видимости определяется лексическими блоками, т.е. частями кода, которые заключены в фигурные скобки.


Пример самого простого лексического блока:


func ExampleScope1() {

var v int = 1


{

/*

* Здесь переменная из внешнего лексического блока затеняется

* переменной внутреннего лексического блока

*/

var v string = "2"

fmt.Println(v)

}


fmt.Println(v)


/*

* В примере мы объявили в отдельных лексических блоках переменные с одним именем и

* разными типами, а затем напечатали значения этих переменных.

*/


// Output:

// 2

// 1

}


Внутри вложенных лексических блоков можно определять имена, которые уже существуют во внешних блоках. В таком случае более внутренние имена "затеняют" внешние и они становятся недоступны до конца блока. Имена, объявленные внутри блоков, недоступны извне.


Циклы, условия, конструкции switch и select также могут создавать по два лексических блока:

  • блок охватывающий переменные, объявленные при инициализации конструкции;
  • явный блок для тела конструкции.


Также неявные лексические блоки создаются для:

  • каждого файла;
  • каждого пакета;
  • всеобщего блока.
Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования