Bir ithalat ifadesinin önündeki alt çizgi ne anlama geliyor?


Yanıtlar:


218

Kısa cevap:

Bir paketi yalnızca yan etkileri nedeniyle içe aktarmak içindir.

Gönderen Git Şartname :

Bir paketi yalnızca yan etkileri (başlatma) için içe aktarmak için boş tanımlayıcıyı açık paket adı olarak kullanın:

içe aktar _ "lib / math"

Sqlite3 içinde

Go-sqlite3 durumunda , alt çizgi içe aktarma, sqlite3sürücüyü init()başka bir işlevi içe aktarmadan işlevde bir veritabanı sürücüsü olarak kaydetmenin yan etkisi için kullanılır :

sql.Register("sqlite3", &SQLiteDriver{})

Bu şekilde kaydolduktan sonra, sqlite3 standart kütüphanenin sqlarayüzündeki örnekte olduğu gibi kodunuzda kullanılabilir:

db, err := sql.Open("sqlite3", "./foo.db")

34

Diğer cevaplar bunu tamamen açıklasa da, "Bana Kodu Göster" insanlar için bu temel olarak şu anlama gelir: paket düzeyinde değişkenler oluşturmak ve initbu paketin işlevini yürütmek .

Ve (varsa) paket düzeyinde değişkenlerin hiyerarşisi ve initbu paketin içe aktardığı paketlerin işlevleri.

Bir paketin gerçekten çağrılmadan yapabileceği tek yan etki, paket düzeyinde değişkenler (genel veya özel) ve içinde initişlev oluşturmaktır.

Not : Çift initişlevden önce bir işlevi çalıştırmak için bir hile vardır . Bunun için paket seviyesi değişkenlerini bu fonksiyonu kullanarak başlatarak kullanabiliriz.

func theVeryFirstFunction() int {
    log.Println("theVeryFirstFunction")
    return 6
}

var (
    Num = theVeryFirstFunction()
)

func init() { log.Println("init", Num) }

17

https://golang.org/doc/effective_go.html#blank

Ya devam eden bir çalışmadır ya da yan etkiler için ithal edilmiştir. Bu durumda, dokümanda açıklandığı gibi yan etkiler için olduğuna inanıyorum.


İşte o sayfadaki Yan etki için içe aktar bağlantısının bir bağlantısı . "Bazen bir paketi açık bir şekilde kullanmadan yalnızca yan etkileri için içe aktarmak yararlıdır" ve "Paketi yalnızca yan etkileri için içe aktarmak için paketi boş tanımlayıcı olarak yeniden adlandırın" açıklamasını yapar.
Luke Sheppard
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.