РекомендуетсяGo

Go: явные imports и границы пакета

Импортируйте пакет под его обычным именем и обращайтесь через qualifier. Стандартная библиотека идет первой группой; исключения для alias, dot и side-effect imports должны иметь причину.

Опубликовано Проверено Изменено

Плохо

package greeting
 
import . "fmt"
import s "strings"
 
func Greeting(name string) string {
    return Sprintf("Hello, %s", s.TrimSpace(name))
}

Хорошо

package greeting
 
import (
	"fmt"
	"strings"
)
 
// Greeting возвращает приветствие без пробелов по краям имени.
func Greeting(name string) string {
	return fmt.Sprintf("Hello, %s", strings.TrimSpace(name))
}

Почему это важно

Qualifier показывает происхождение вызова. Import cycle запрещен самим Go; неиспользуемый обычный import тоже ошибка компиляции. Автоматическое добавление import не подтверждает, что выбран правильный модуль или что его init не имеет нежелательных эффектов.

Когда применять

Для Go packages. Сначала stdlib, затем внешние/проектные группы с пустой строкой по принятому профилю. Alias используйте при конфликте имен или устойчивом обоснованном API-контексте, а не для сокращения каждого имени. Dot-import не используйте в обычном коде; узкое исключение возможно в внешнем test package, когда оно обосновано, но явный qualifier предпочтителен.

Blank import означает выполнение init/registration; используйте его в точке сборки приложения или нужном тесте с пояснением, например для регистрации driver. Он не должен быть способом скрыть unused import. Не запускайте неуправляемые сетевые операции/долгие фоновые процессы в init. При цикле зависимостей пересмотрите расположение общего контракта; не обходите проблему ручным копированием пакета.

gofmt форматирует исходник. goimports может добавлять/удалять imports и группировать их, если проект выбрал закрепленную версию инструмента; результат и изменение go.mod проверяются человеком. Сборка выполняется для поддерживаемых tags/platforms, поскольку разные файлы могут иметь разные imports.

Кто что делает

Человек

Выбирает профиль группировки и допустимые side-effect imports.

AI-агент

Проверяет происхождение пакета, цикл и init; использует formatter без слепого принятия нового модуля.

Как проверить у себя

  1. Обычный импорт fmt/strings → сборка → вызовы явно принадлежат пакетам, unused imports нет → go test/go vet.

  2. Добавлен цикл A→B→A либо лишний import → сборка → ошибка обнаружена → compiler output.

  3. Нужен side-effect driver либо alias-конфликт → review → назначение и точка регистрации понятны, startup остается управляемым → import/init review.

ПервоисточникиИстория изменений на GitHub

Дата проверки отражает содержательную сверку. Синхронизация сайта не обновляет её автоматически.