go - 导入副作用

标签 go functional-programming

我是 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 一起使用; expvarpprof 包都在它们的 init 函数中注册 HTTP 处理程序,并且同样经常与 _ 导入一起使用。

这记录在 Go spec section on package initialization 中.

关于go - 导入副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48427872/

相关文章:

functional-programming - Erlang supervisor 和一个关键的 child

没有参数匹配的 golang cobra 子命令

javascript - 使用函数式编程复制数组的元素

oop - 函数式编程中的领域驱动设计?

Java Streams with Optional 转换的工作原理

recursion - F# 递归与迭代速度/开销

go - C++ 中的 Const 引用和 Golang 中的等价物

testing - 使用包调用 go test 时的输出差异

go - 如何使用 golang 和 labstack echo 处理对多个服务的代理

go - 如何使用gorm制作外键