РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
903 of 1593 menu

Область видимости файла

Область видимости файла в Go определяет, какие идентификаторы доступны в пределах одного файла с исходным кодом. Эта область действует для объявлений, которые находятся на уровне пакета, но не экспортируются (не начинаются с заглавной буквы). Идентификаторы с областью видимости файла видны только в том файле, где они объявлены, и не доступны в других файлах того же пакета.

В первую очередь это касается неэкспортируемых констант, переменных, типов и функций, объявленных на уровне пакета. Если такое объявление используется только внутри одного файла, оно не будет видно в других файлах пакета, даже если они находятся в той же директории.

Синтаксис

package main const localConst = "only in this file" var localVar int type localType struct{} func localFunc() {}

В приведенном примере все идентификаторы имеют область видимости файла, поскольку они объявлены с маленькой буквы и находятся на уровне пакета.

Пример

Давайте создадим файл <main.go> с неэкспортируемой переменной и функцией:

package main import "fmt" var fileScopedVar = "I am visible only in this file" func fileScopedFunc() string { return "Hello from file scope" } func main() { fmt.Println(fileScopedVar) fmt.Println(fileScopedFunc()) }

Результат выполнения кода:

"I am visible only in this file" "Hello from file scope"

Пример

Теперь попробуем использовать те же идентификаторы из другого файла того же пакета (<helper.go>):

package main func helperFunc() { // fileScopedVar и fileScopedFunc не видны здесь // Это вызовет ошибку компиляции }

При попытке скомпилировать проект с двумя файлами возникнет ошибка, так как <fileScopedVar> и <fileScopedFunc> не видны в <helper.go>.

Пример

Чтобы исправить ситуацию, нужно экспортировать идентификаторы, сделав их видимыми для всего пакета (с заглавной буквы), либо вынести общие объявления в отдельный файл:

package main import "fmt" var ExportedVar = "I am visible in all package files" func ExportedFunc() string { return "Visible everywhere" } func main() { fmt.Println(ExportedVar) fmt.Println(ExportedFunc()) }

Теперь эти идентификаторы имеют область видимости пакета и доступны из любого файла пакета.

Смотрите также

Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить