Видимость на уровне пакета
Видимость на уровне пакета (package scope) в Go означает, что идентификатор (переменная, константа, тип или функция) объявлен вне любой функции и доступен во всех файлах, принадлежащих одному пакету. Такие идентификаторы видны во всем пакете и могут быть использованы в любом файле этого пакета без дополнительных импортов.
Идентификаторы уровня пакета могут быть экспортируемыми (с заглавной буквы) или неэкспортируемыми (со строчной буквы). Экспортируемые идентификаторы доступны за пределами пакета при импорте, а неэкспортируемые — только внутри пакета.
Синтаксис объявления на уровне пакета
package main
var packageVar int // переменная уровня пакета
const packageConst = 100 // константа уровня пакета
type PackageType struct {} // тип уровня пакета
func packageFunc() {} // функция уровня пакета
Пример
Объявим переменную уровня пакета и используем ее в функции
main:
package main
import "fmt"
var counter int = 0
func increment() {
counter++
}
func main() {
fmt.Println(counter) // 0
increment()
fmt.Println(counter) // 1
}
Результат выполнения кода:
0
1
Пример
Объявим константу и тип уровня пакета. Константа будет доступна во всех функциях пакета, а тип можно использовать для создания переменных:
package main
import "fmt"
const version = "v1.0.0"
type User struct {
Name string
Age int
}
func main() {
fmt.Println("Version:", version)
u := User{Name: "Alice", Age: 30}
fmt.Printf("User: %+v\n", u)
}
Результат выполнения кода:
"Version: v1.0.0"
"User: {Name:Alice Age:30}"
Пример
Идентификаторы уровня пакета могут быть использованы в
разных файлах одного пакета. Например, переменная
sharedVar объявлена в файле a.go
и используется в файле b.go:
// a.go
package main
var sharedVar string = "Hello from package scope"
// b.go
package main
import "fmt"
func main() {
fmt.Println(sharedVar)
}
Результат выполнения кода:
"Hello from package scope"
Смотрите также
-
статью
экспортируемые идентификаторы,
которые доступны за пределами пакета -
статью
неэкспортируемые идентификаторы,
которые видны только внутри пакета -
статью
блочная область видимости,
которая ограничена фигурными скобками -
статью
область видимости функции,
которая ограничена телом функции