run - ¿Qué significa un guión bajo frente a una declaración de importación en Golang?
import other package golang (3)
Respuesta corta:
Es para importar un paquete únicamente por sus efectos secundarios.
Desde la especificación Go :
Para importar un paquete únicamente por sus efectos secundarios (inicialización), use el identificador en blanco como nombre explícito del paquete:
import _ "lib / math"
En sqlite3
En el caso de go-sqlite3 , la importación de subrayado se utiliza para el efecto secundario de registrar el controlador sqlite3
como un controlador de base de datos en la función init()
, sin importar ninguna otra función:
sql.Register("sqlite3", &SQLiteDriver{})
Una vez que se ha registrado de esta manera, sqlite3 se puede utilizar con la interfaz sql
la biblioteca estándar en su código, como en el ejemplo:
db, err := sql.Open("sqlite3", "./foo.db")
Vi este ejemplo de sqlite3
en GitHub
:
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"log"
"os"
)
y parece que no puede encontrar lo que significa el guión bajo frente a una declaración de importación.
Mientras que otras respuestas lo describieron completamente, para la gente de "Mostrarme el código", esto básicamente significa: crear variables a nivel de paquete y ejecutar la función init
de ese paquete.
Y (si existe) la jerarquía de las variables de nivel de paquete y las funciones init
de los paquetes que este paquete ha importado.
El único efecto secundario que un paquete puede hacer, sin ser llamado realmente, es mediante la creación de variables de nivel de paquete (públicas o privadas) y dentro de su función init
.
Nota : Hay un truco para ejecutar una función incluso antes de la función de init
. Podemos usar variables de nivel de paquete para esto inicializándolos usando esa función.
func theVeryFirstFunction() int {
log.Println("theVeryFirstFunction")
return 6
}
var (
Num = theVeryFirstFunction()
)
func init() { log.Println("init", Num) }
http://golang.org/doc/effective_go.html#blank_unused
Es un trabajo en progreso o importado para efectos secundarios. En este caso, creo que es por los efectos secundarios, como se describe en el documento.