Что означает подчеркивание перед оператором import в Golang?

Я видел этот пример из sqlite3 on GitHub :

import (
        "database/sql"
        "fmt"
        _ "github.com/mattn/go-sqlite3"
        "log"
        "os"
)

и, похоже, не может найти, что означает подчеркивание перед оператором import.

3 ответов


короткий ответ:

это для импорта пакета исключительно для его побочных эффектов.

С спецификация Go:

чтобы импортировать пакет исключительно для его побочных эффектов (инициализации), используйте пустой идентификатор в качестве явного имени пакета:

импорт _ "lib / math"

в sqlite3

в случае идем-и sqlite3, импорт подчеркивания используется для побочного эффекта регистрации sqlite3 драйвер в качестве драйвера базы данных в , без импорта каких-либо других функций:

sql.Register("sqlite3", &SQLiteDriver{})

как только он зарегистрирован таким образом, sqlite3 можно использовать со стандартной библиотекой sql интерфейс в коде, как в Примере:

db, err := sql.Open("sqlite3", "./foo.db")

в то время как другие ответы описали его полностью, для людей "Покажите мне код" это в основном означает: создайте переменные уровня пакета и выполните init функции этого пакета.

и (если есть) иерархия переменных уровня пакета & init функции пакетов, которые этот пакет импортировал.

единственный побочный эффект, который пакет может сделать, не будучи фактически вызванным, - это создание переменных уровня пакета (общедоступных или частных), и внутри


https://golang.org/doc/effective_go.html#blank

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