Точечный импорт в Go

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

Синтаксис

goimport . "имя_пакета"

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

Пример

Рассмотрим пример использования точечного импорта для пакета fmt:

gopackage main

import . "fmt"

func main() {
  Println("Hello, World!")
  Printf("Number: %d\n", 42)
}

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

go"Hello, World!"
"Number: 42"

Как видно из примера, функции Println и Printf вызываются без префикса fmt..

Пример

Использование точечного импорта для математических функций:

gopackage main

import (
  . "math"
  "fmt"
)

func main() {
  fmt.Println(Sqrt(16))
  fmt.Println(Pi)
  fmt.Println(Pow(2, 3))
}

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

go"4"
"3.141592653589793"
"8"

В этом примере функции Sqrt, константа Pi и функция Pow импортированы из пакета math и доступны напрямую.

Пример

Рассмотрим конфликт имен при использовании точечного импорта:

gopackage main

import (
  . "fmt"
  . "strings"
)

func main() {
  // Конфликт: функция ToUpper есть в обоих пакетах?
  // В пакете fmt нет ToUpper, но для примера
  s := "hello"
  Println(ToUpper(s))
}

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

go"HELLO"

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

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