ホームページ > バックエンド開発 > Golang > Go インポートで空の識別子を使用する場合とその理由は?

Go インポートで空の識別子を使用する場合とその理由は?

Susan Sarandon
リリース: 2024-11-30 21:04:14
オリジナル
110 人が閲覧しました

When and Why Use Blank Identifiers in Go Imports?

初期化のための Go インポートで空の識別子を使用する

Go 仕様では、パッケージのみをインポートする場合、明示的なパッケージ名として空の識別子を使用することが推奨されていますその副作用のために。ただし、この構造の目的は明らかではないかもしれません。

実際の使用例の 1 つは、エクスポートされた関数を使用せずにデータベース ドライバーを初期化することです。次の例を考えてみましょう。

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
}
ログイン後にコピー

このスニペットでは、_ "github.com/jackc/pgx/v4/reflect" インポートは、init 関数で PostgreSQL ドライバーを初期化することによってデータベース接続を設定します。リフレクト パッケージのエクスポートされた関数を使用する必要がないため、パッケージ エイリアスの代わりに空の識別子を使用します。

別の例は、グローバル状態を設定することです:

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
}
ログイン後にコピー

ここでは、_ "github.com/go-redis/redis/v9" インポートによって init 関数が呼び出され、グローバル Redis 接続が確立されます。空白の識別子を使用することで、パッケージのエイリアスの使用を回避し、コンパイラーがそれを無視できるようにしながら、初期化のメリットを享受できます。

以上がGo インポートで空の識別子を使用する場合とその理由は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート