Точечный импорт в Go
Точечный импорт (dot import) в Go позволяет использовать экспортированные идентификаторы пакета без указания префикса пакета. Вместо имени пакета используется точка, после чего все экспортированные имена становятся доступными напрямую. Точечный импорт не рекомендуется к использованию в реальных проектах, так как он может приводить к конфликтам имен и снижать читаемость кода.
Синтаксис
import . "имя_пакета"
Точка перед именем пакета указывает компилятору импортировать все экспортированные идентификаторы напрямую в текущую область видимости.
Пример
Рассмотрим пример использования точечного импорта для пакета fmt:
package main
import . "fmt"
func main() {
Println("Hello, World!")
Printf("Number: %d\n", 42)
}
Результат выполнения кода:
"Hello, World!"
"Number: 42"
Как видно из примера, функции Println и Printf
вызываются без префикса fmt..
Пример
Использование точечного импорта для математических функций:
package main
import (
. "math"
"fmt"
)
func main() {
fmt.Println(Sqrt(16))
fmt.Println(Pi)
fmt.Println(Pow(2, 3))
}
Результат выполнения кода:
"4"
"3.141592653589793"
"8"
В этом примере функции Sqrt, константа Pi и
функция Pow импортированы из пакета math и
доступны напрямую.
Пример
Рассмотрим конфликт имен при использовании точечного импорта:
package main
import (
. "fmt"
. "strings"
)
func main() {
// Конфликт: функция ToUpper есть в обоих пакетах?
// В пакете fmt нет ToUpper, но для примера
s := "hello"
Println(ToUpper(s))
}
Результат выполнения кода:
"HELLO"
Точечный импорт может привести к конфликтам, если два пакета имеют одинаковые имена экспортированных идентификаторов. В таких случаях программа не скомпилируется.
Смотрите также
-
концепцию
экспортированных идентификаторов,
которые становятся доступными при импорте -
механизм
алиасов импорта,
который позволяет задать другое имя для импортируемого пакета -
способ
пустого импорта,
который используется для выполнения init-функций пакета -
правила
области видимости пакета,
в которой действуют импортированные идентификаторы