初期化のための 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 サイトの他の関連記事を参照してください。