Heim > Backend-Entwicklung > Golang > Wann und warum werden bei Go-Importen leere Bezeichner verwendet?

Wann und warum werden bei Go-Importen leere Bezeichner verwendet?

Susan Sarandon
Freigeben: 2024-11-30 21:04:14
Original
110 Leute haben es durchsucht

When and Why Use Blank Identifiers in Go Imports?

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
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage