Verwendung einer leeren Kennung in Go-Importen zur Initialisierung
Die Go-Spezifikation empfiehlt die Verwendung der leeren Kennung als expliziten Paketnamen, um nur ein Paket zu importieren wegen seiner Nebenwirkungen. Der Zweck dieses Konstrukts ist jedoch möglicherweise nicht offensichtlich.
Ein realer Anwendungsfall besteht darin, Datenbanktreiber zu initialisieren, ohne ihre exportierten Funktionen zu verwenden. Betrachten Sie das folgende Beispiel:
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 }
In diesem Snippet richtet der _ „github.com/jackc/pgx/v4/reflect“-Import eine Datenbankverbindung ein, indem er den PostgreSQL-Treiber mit der Init-Funktion initialisiert. Da wir keine der exportierten Funktionen des Reflect-Pakets verwenden müssen, verwenden wir den leeren Bezeichner anstelle eines Paketalias.
Ein weiteres Beispiel ist das Einrichten des globalen Status:
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 }
Hier ruft der _ „github.com/go-redis/redis/v9“-Import die Init-Funktion auf, um eine globale Redis-Verbindung herzustellen. Durch die Verwendung des leeren Bezeichners vermeiden wir die Verwendung eines Paketalias und ermöglichen dem Compiler, ihn zu ignorieren, während wir dennoch von der Initialisierung profitieren.
Das obige ist der detaillierte Inhalt vonWann und warum werden bei Go-Importen leere Bezeichner verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!