Глиф Учебники

Ошибка imported and not used

Справочник · Go · 2 минуты чтения

Текст
./main.go:5:2: "os" imported and not used

Go не собирает программу, в которой подключён пакет, но ни одно его имя не используется. Как и с переменными, это ошибка, а не предупреждение. Решение — удалить пакет из import:

Go
package main

import (
    "fmt"
)

func main() {
    fmt.Println("готово")
}
Вывод
готово

Если в скобках остался один пакет, их можно убрать: import "fmt".

Пусть редактор делает это сам

Следить за import вручную не обязательно. Расширение Go для VS Code при сохранении файла само добавляет нужные пакеты и убирает лишние. Если этого не происходит, проверьте, что расширение установлено и включено форматирование при сохранении.

Без редактора то же делает утилита goimports — она устроена как gofmt, но ещё и правит import:

Bash
go install golang.org/x/tools/cmd/goimports@latest
goimports -w main.go

-w записывает исправления в файл. Сама программа попадёт в $HOME/go/bin — эта папка должна быть в PATH (справка go: command not found).

Обратная ошибка: undefined

Если пакет используется, а import для него нет, сообщение другое:

Текст
./main.go:6:2: undefined: strings

Добавьте пакет в import: "strings". Имя в коде — последняя часть пути: для "math/rand/v2" пишут rand.IntN, для "net/http" — http.Get.

Пакет нужен только ради действия при подключении

Некоторые пакеты подключают ради того, что они делают при загрузке, а их имена в коде не нужны. Например, драйвер базы данных регистрирует себя для database/sql. Чтобы Go не считал такой импорт лишним, перед путём пишут _:

Go
import (
    "database/sql"

    _ "github.com/lib/pq"
)

Так import не даёт ошибки, а код инициализации пакета выполняется. Ставить _ просто чтобы заглушить ошибку у обычного пакета не нужно — удалите его.

Пока пишете код

Если пакет скоро понадобится, а собрать программу нужно сейчас, можно временно использовать любое его имя:

Go
var _ = os.Exit

Но проще удалить строку import и вернуть её, когда пакет понадобится, — редактор с расширением Go сделает это сам.

Подводные камни