Widziałem ten przykład od sqlite3
dniaGitHub
:
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"log"
"os"
)
i nie może znaleźć tego, co oznacza znak podkreślenia przed instrukcją importu.
Widziałem ten przykład od sqlite3
dniaGitHub
:
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"log"
"os"
)
i nie może znaleźć tego, co oznacza znak podkreślenia przed instrukcją importu.
Odpowiedzi:
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 przypadku go-sqlite3 import podkreślenia służy do efektu ubocznego rejestracji sqlite3
sterownika 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 sql
interfejsem biblioteki w twoim kodzie, tak jak w przykładzie:
db, err := sql.Open("sqlite3", "./foo.db")
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 init
funkcję tego pakietu.
I (jeśli w ogóle) hierarchię zmiennych na poziomie pakietu i init
funkcji 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 init
funkcji.
Uwaga : Istnieje sztuczka, aby uruchomić funkcję przed init
funkcją 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) }
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.