Maison >développement back-end >Golang >Quand et pourquoi utiliser des identifiants vierges dans les importations Go ?

Quand et pourquoi utiliser des identifiants vierges dans les importations Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-30 21:04:14120parcourir

When and Why Use Blank Identifiers in Go Imports?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn