style run other library golang create code go import

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) }