¿Qué significa un subrayado delante de una declaración de importación en Golang?
Vi este ejemplo a partir de sqlite3
GitHub
:
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"log"
"os"
)
Y no parece encontrar lo que significa el subrayado delante de una declaración de importación.
3 answers
Respuesta corta:
Es para importar un paquete únicamente por sus efectos secundarios.
De 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 guiones bajos 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 registra de esta manera, sqlite3 se puede usar con la interfaz sql
de la biblioteca estándar en su código como en el ejemplo:
db, err := sql.Open("sqlite3", "./foo.db")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-18 15:05:16
Mientras que otras respuestas lo describieron completamente, para la gente de "Show me The Code", esto básicamente significa: crear variables a nivel de paquete y ejecutar la función init
de ese paquete.
Y (en su caso) la jerarquía de variables a nivel de paquete & init
funciones de paquetes que, este paquete ha importado.
El único efecto secundario que un paquete puede hacer, sin ser realmente llamado, es mediante la creación de variables a nivel de paquete (público o privado) y dentro de él es init
función.
Nota: Hay un truco para ejecutar una función antes incluso de la función init
. Podemos usar variables de nivel de paquete para esto inicializándolas usando esa función.
func theVeryFirstFunction() int {
log.Println("theVeryFirstFunction")
return 6
}
var (
Num = theVeryFirstFunction()
)
func init() { log.Println("init", Num) }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-12 10:22:23
Https://golang.org/doc/effective_go.html#blank
Es un trabajo en curso o importado para efectos secundarios. En este caso, creo que es por los efectos secundarios, como se describe en el documento.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-22 20:33:49