import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"log"
"os"
)
そして、インポートステートメントの前にあるアンダースコアが何を意味するのかを見つけることができないようです。
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"log"
"os"
)
そして、インポートステートメントの前にあるアンダースコアが何を意味するのかを見つけることができないようです。
回答:
副作用のためにパッケージをインポートするためのものです。
Go仕様から:
副作用(初期化)のみを目的としてパッケージをインポートするには、明示的なパッケージ名として空の識別子を使用します。
インポート_ "lib / math"
以下の場合に行く-sqlite3の、下線のインポートは、登録の副作用のために使用されるsqlite3
データベースドライバとしてドライバをinit()
任意の他の機能をインポートすることなく、関数:
sql.Register("sqlite3", &SQLiteDriver{})
この方法で登録すると、次の例のように、sqlite3をsql
コード内の標準ライブラリのインターフェイスで使用できます。
db, err := sql.Open("sqlite3", "./foo.db")
他の回答はそれを完全に説明しましたが、「コードを見せて」の人々にとって、これは基本的に、パッケージレベルの変数を作成しinit
、そのパッケージの関数を実行することを意味します。
そして、もしあればinit
、このパッケージがインポートしたパッケージレベルの変数とパッケージの関数の階層。
パッケージが実際に呼び出されずに発生する可能性がある唯一の副作用は、パッケージレベルの変数(パブリックまたはプライベート)を作成し、そのinit
関数内に作成することです。
注:関数を実行する前に関数を実行するトリックがありinit
ます。この関数を使用して初期化することにより、パッケージレベルの変数を使用できます。
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
進行中の作業か、副作用のためにインポートされたものです。この場合、ドキュメントに記載されているように、それは副作用のためだと思います。