Co oznacza podkreślenie przed instrukcją importu?


Odpowiedzi:


218

Krótka odpowiedź:

Służy do importowania pakietu wyłącznie ze względu na jego skutki uboczne.

Z specyfikacji Go :

Aby zaimportować pakiet wyłącznie ze względu na jego skutki uboczne (inicjowanie), użyj pustego identyfikatora jako jawnej nazwy pakietu:

import _ "lib / math"

W sqlite3

W przypadku go-sqlite3 import podkreślenia służy do efektu ubocznego rejestracji sqlite3sterownika jako sterownika bazy danych w init()funkcji, bez importowania innych funkcji:

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

Po zarejestrowaniu w ten sposób, sqlite3 może być używany ze standardowym sqlinterfejsem biblioteki w twoim kodzie, tak jak w przykładzie:

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

34

Podczas gdy inne odpowiedzi opisywały go całkowicie, dla osób „Pokaż mi kod” oznacza to w zasadzie: utwórz zmienne na poziomie pakietu i uruchom initfunkcję tego pakietu.

I (jeśli w ogóle) hierarchię zmiennych na poziomie pakietu i initfunkcji pakietów, które ten pakiet zaimportował.

Jedynym efektem ubocznym, który pakiet może wywołać, bez faktycznego wywołania, jest utworzenie zmiennych na poziomie pakietu (publicznego lub prywatnego) i wewnątrz jego initfunkcji.

Uwaga : Istnieje sztuczka, aby uruchomić funkcję przed initfunkcją parzystą . Możemy do tego wykorzystać zmienne na poziomie pakietu, inicjując je za pomocą tej funkcji.

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

Jest to albo praca w toku, albo importowana z powodu efektów ubocznych. W tym przypadku uważam, że to ze względu na skutki uboczne, jak opisano w dokumencie.


Oto link do kotwicy importu efektów ubocznych na tej stronie. Wyjaśnia: „czasami warto zaimportować pakiet tylko ze względu na jego skutki uboczne, bez wyraźnego użycia”, oraz „Aby zaimportować pakiet tylko ze względu na jego skutki uboczne, zmień nazwę pakietu na pusty identyfikator”.
Luke Sheppard,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.