Что означает подчеркивание перед оператором import в Golang?
Я видел этот пример из sqlite3
on GitHub
:
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"log"
"os"
)
и, похоже, не может найти, что означает подчеркивание перед оператором import.
3 ответов
короткий ответ:
это для импорта пакета исключительно для его побочных эффектов.
чтобы импортировать пакет исключительно для его побочных эффектов (инициализации), используйте пустой идентификатор в качестве явного имени пакета:
импорт _ "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
Это либо работа, либо импортируемые для побочных эффектов. В этом случае я считаю, что это для побочных эффектов, как описано в документе.