インポートステートメントの前にある下線はどういう意味ですか?


回答:


218

短い答え:

副作用のためにパッケージをインポートするためのものです。

Go仕様から:

副作用(初期化)のみを目的としてパッケージをインポートするには、明示的なパッケージ名として空の識別子を使用します。

インポート_ "lib / math"

sqlite3内

以下の場合に行く-sqlite3の、下線のインポートは、登録の副作用のために使用されるsqlite3データベースドライバとしてドライバをinit()任意の他の機能をインポートすることなく、関数:

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

この方法で登録すると、次の例のように、sqlite3をsqlコード内の標準ライブラリのインターフェイスで使用できます。

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

34

他の回答はそれを完全に説明しましたが、「コードを見せて」の人々にとって、これは基本的に、パッケージレベルの変数を作成しinit、そのパッケージの関数を実行することを意味します。

そして、もしあればinit、このパッケージがインポートしたパッケージレベルの変数とパッケージの関数の階層。

パッケージが実際に呼び出されずに発生する可能性がある唯一の副作用は、パッケージレベルの変数(パブリックまたはプライベート)を作成し、そのinit関数内に作成することです。

:関数を実行する前に関数を実行するトリックがありinitます。この関数を使用して初期化することにより、パッケージレベルの変数を使用できます。

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

進行中の作業か、副作用のためにインポートされたものです。この場合、ドキュメントに記載されているように、それは副作用のためだと思います。


そのページの「副作用インポート」アンカーへのリンクは次のとおりです。「明示的に使用せずに、副作用のためだけにパッケージをインポートすると便利な場合があります」、「副作用のみのためにパッケージをインポートするには、パッケージの名前を空白の識別子に変更する」と説明されています。
ルークシェパード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.