Неиспользуемый импорт и переменные
Это ошибка - импортировать пакет или объявлять переменную без его/ее использования. Неиспользованный импорт приводит к раздуванию программы и медленной компиляции, в то время как переменная, которая инициализируется, но не используется, это по крайней мере потраченные впустую вычисления и, возможно, свидетельствует о большей ошибке. Когда программа находится в активной разработке, однако, часто возникают неиспользованные импорт и переменные, и это может быть раздражающим, удалять их только для продолжения компиляции, чтобы они снова понадобились позже. Пустой идентификатор обеспечивает обходной путь.
Эта наполовину написанная программа имеет два неиспользованных импорта (fmt
и io
) и неиспользованную переменную (fd
), так что она не скомпилируется, но было бы неплохо увидеть, верен ли пока код.
package main
import (
"fmt"
"io"
"log"
"os"
)
func main() {
fd, err := os.Open("test.go")
if err != nil {
log.Fatal(err)
}
// TODO: использовать fd.
}
Чтобы заставить замолчать жалобы о неиспользованном импорте, используйте пустой идентификатор для ссылки на символ из импортируемого пакета. Аналогично, присвоение неиспользуемой переменной fd
пустому идентификатору заставит замолчать ошибку о неиспользованной переменной. Эта версия программы компилируется.
package main
import (
"fmt"
"io"
"log"
"os"
)
var _ = fmt.Printf // Для отладки; удалите в дальнейшем.
var _ io.Reader // Для отладки; удалите в дальнейшем.
func main() {
fd, err := os.Open("test.go")
if err != nil {
log.Fatal(err)
}
// TODO: использовать fd.
_ = fd
}
По соглашению, глобальные объявления, чтобы заглушить ошибки импорта, должны идти сразу после импорта и должны быть прокомментированны, как для того, чтобы их было легко найти, так и в качестве напоминания, чтобы привести вещи в порядок позже.
Импорт для побочного эффекта
Неиспользуемый импорт, такой как fmt
или io
в предыдущем примере в конечном итоге должен быть использован или удален: пустые назначения свидетельствуют о незавершенной работе над кодом. Но иногда полезно импортировать пакет только для его побочных эффектов, без какого-либо явного использования. Например, во время его функции init
пакет net/http/pprof
регистрирует обработчики HTTP, которые обеспечивают отладочную информацию. У него есть экспортированный API, но большинству клиентов нужна только регистрация обработчика и получить доступ к данным через веб-страницу. Чтобы импортировать пакет только для его побочных эффектов, переименуйте пакет на пустой идентификатор:
import _ "net/http/pprof"
Эта форма импорта дает понять, что пакет импортируется из-за его побочных эффектов, потому что нет другого использования пакета: в этом файле у него нет имени. (Если имя будет, и мы не будем использовать это имя, компилятор отклонит программу.)
Читайте также:
Комментариев нет:
Отправить комментарий