首頁 > 後端開發 > Golang > 何時以及為何在 Go 導入中使用空白標識符?

何時以及為何在 Go 導入中使用空白標識符?

Susan Sarandon
發布: 2024-11-30 21:04:14
原創
116 人瀏覽過

When and Why Use Blank Identifiers in Go Imports?

在Go 導入中使用空白標識符進行初始化

Go 規範建議使用空白標識符作為顯式包名稱來單獨導入包因為它的副作用。但是,此構造的目的可能並不明顯。

一個現實用例是在不使用匯出函數的情況下初始化資料庫驅動程式。考慮以下範例:

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 驅動程式來設定資料庫連線。由於我們不需要使用 Reflect 套件的任何匯出函數,因此我們使用空白識別碼而不是套件別名。

另一個範例是設定全域狀態:

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板