Utilisation d'un identifiant vide dans les importations Go pour l'initialisation
La spécification Go recommande d'utiliser l'identifiant vide comme nom de package explicite pour importer un package uniquement pour ses effets secondaires. Cependant, le but de cette construction peut ne pas être évident.
Un cas d'utilisation réel consiste à initialiser les pilotes de base de données sans utiliser leurs fonctions exportées. Prenons l'exemple suivant :
package main import ( _ "github.com/jackc/pgx/v4/reflect" "github.com/jackc/pgx/v4" ) func main() { conn, err := pgx.Connect(ctx, "user=jack password=secret database=world") if err != nil { log.Fatal(err) } _ = conn }
Dans cet extrait, l'importation _ "github.com/jackc/pgx/v4/reflect" configure une connexion à la base de données en initialisant le pilote PostgreSQL avec la fonction init. Comme nous n'avons besoin d'utiliser aucune des fonctions exportées du package Reflect, nous utilisons l'identifiant vide au lieu d'un alias de package.
Un autre exemple est la configuration de l'état global :
package main import ( _ "github.com/go-redis/redis/v9" "log" ) func init() { // Set up global Redis client client := redis.NewClient(redis.Options{ Addr: "localhost:6379", }) if err := client.Ping().Err(); err != nil { log.Fatalf("unable to connect to Redis: %v", err) } clientInfo, err := client.Info("Memory").Result() if err != nil { log.Fatalf("unable to get Redis info: %v", err) } log.Printf("Redis info: %s", clientInfo) } func main() { // Do stuff with the initialized global Redis client }
Ici, l'import _ "github.com/go-redis/redis/v9" appelle la fonction init pour établir une connexion Redis globale. En utilisant l'identifiant vide, nous évitons d'utiliser un alias de package et permettons au compilateur de l'ignorer, tout en bénéficiant de l'initialisation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!