What does an underscore in front of an import statement mean?

Adrian picture Adrian · Jan 19, 2014 · Viewed 44.5k times · Source

I saw this example from sqlite3 on GitHub :

import (
        "database/sql"
        "fmt"
        _ "github.com/mattn/go-sqlite3"
        "log"
        "os"
)

and cannot seem to find what the underscore in front of an import statement means.

Answer

Herman Schaaf picture Herman Schaaf · Jan 20, 2014

Short answer:

It's for importing a package solely for its side-effects.

From the Go Specification:

To import a package solely for its side-effects (initialization), use the blank identifier as explicit package name:

import _ "lib/math"

In sqlite3

In the case of go-sqlite3, the underscore import is used for the side-effect of registering the sqlite3 driver as a database driver in the init() function, without importing any other functions:

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

Once it's registered in this way, sqlite3 can be used with the standard library's sql interface in your code like in the example:

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