import语句前面的下划线是什么意思?


Answers:


218

简短答案:

它仅出于副作用导入软件包。

执行规范

要仅出于副作用(初始化)导入软件包,请使用空白标识符作为显式软件包名称:

导入_“ lib / math”

在sqlite3

对于go-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) }

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.