J'ai vu cet exemple de sqlite3
sur GitHub
:
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"log"
"os"
)
et ne semble pas pouvoir trouver ce que le trait de soulignement devant une déclaration d'importation signifie.
C'est pour importer un paquet uniquement pour ses effets secondaires.
De la spécification Go :
Pour importer un package uniquement pour ses effets secondaires (initialisation), utilisez l'identificateur vide en tant que nom de package explicite:
importer _ "lib/math"
Dans le cas de go-sqlite , l’importation de soulignement est utilisée pour l’effet secondaire de l’enregistrement du pilote sqlite3
En tant que pilote de base de données dans la fonction init()
, sans importer d'autres fonctions:
sql.Register("sqlite3", &SQLiteDriver{})
Une fois enregistré de cette manière, sqlite3 peut être utilisé avec l'interface sql
de la bibliothèque standard dans votre code, comme dans l'exemple suivant:
db, err := sql.Open("sqlite3", "./foo.db")
Alors que d'autres réponses le décrivaient complètement, pour les personnes "Montrez-moi le code", cela signifie essentiellement: créez des variables au niveau du package et exécutez la fonction init
de ce package.
Et (le cas échéant) la hiérarchie des variables au niveau du package & init
fonctions des packages que ce package a importés.
Le seul effet secondaire qu'un paquet peut avoir, sans être appelé, consiste à créer des variables au niveau du paquet (publiques ou privées) et à l'intérieur de sa fonction init
.
Note: Il y a une astuce pour exécuter une fonction avant même la fonction init
. Pour cela, nous pouvons utiliser des variables de niveau paquet en les initialisant avec cette fonction.
func theVeryFirstFunction() int {
log.Println("theVeryFirstFunction")
return 6
}
var (
Num = theVeryFirstFunction()
)
func init() { log.Println("init", Num) }
https://golang.org/doc/effective_go.html#blank
C'est soit un travail en cours, soit importé pour des effets secondaires. Dans ce cas, je crois que c’est pour les effets secondaires, tels que décrits dans la doc.