导入副作用

时间:2018-01-24 16:59:49

标签: go functional-programming

我是Go和功能范例的新手。在golang中使用数据库连接时,我必须使用import mysql驱动程序。我偶然发现了#34; _"这是为变量和导入包提供空白标识符,它们的副作用是soley。

搜索副作用并找到此side effects in es6

我没有理解的是函数的副作用取决于一个全局变量,它偏离了纯函数的参照透明度。但是包装怎么会带来副作用呢? 是因为对包的依赖是副作用吗?

例如:

import _ "github.com/go-sql-driver/mysql"

db, err := sql.Open("mysql", "user:password@/dbname")

这里的导入有" _"因为Open语句依赖于驱动程序名称?

1 个答案:

答案 0 :(得分:2)

使用_导入感兴趣的主要副作用是init函数的执行。包可以包括init函数,该函数将在程序启动时执行main之前执行。对于DB驱动程序,这用于注册驱动程序,以便您可以将其与sql.Open一起使用; expvarpprof个软件包都在init函数中注册了HTTP处理程序,并且通常与_个导入一起使用。

Go spec section on package initialization中记录了这一点。