我是 Go 和函数范式的新手。在 golang 中处理数据库连接时,我必须 import
mysql 驱动程序。我遇到了“_”,它提到了变量的空白标识符和导入包,这些包只是因为它们的副作用。
搜索副作用并找到这个 side effects in es6
我不明白的是函数的副作用取决于全局变量,它偏离了纯函数的引用透明性。但是一个包怎么会带来副作用呢? 是因为对包的依赖作为副作用吗?
例如:
import _ "github.com/go-sql-driver/mysql"
db, err := sql.Open("mysql", "user:password@/dbname")
这里导入有“_”是因为Open
语句依赖于驱动程序名称?
最佳答案
对于 _
导入感兴趣的主要副作用是 init
函数的执行。一个包可以包含一个 init
函数,该函数将在程序启动时执行,然后再执行 main
。对于数据库驱动程序,这用于注册驱动程序,以便您可以将其与 sql.Open
一起使用; expvar
和 pprof
包都在它们的 init
函数中注册 HTTP 处理程序,并且同样经常与 _
导入一起使用。
关于go - 导入副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48427872/