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

前端 未结 4 1130
梦如初夏
梦如初夏 2020-11-30 17:31

I saw this example from sqlite3 on GitHub :

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


        
4条回答
  •  [愿得一人]
    2020-11-30 17:56

    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")
    

提交回复
热议问题