go init函数_Go 语言如何连接关系型数据库

本文将讲述如何使用 Go 语言连接 SQL(关系型)数据库,以下简称为SQL 数据库。

先看这个连接到 Microsoft SQL Server 数据库的例子

3d71aa539c828926e58e58af72ec9a29.png

准备连接到数据库

  • 要想连接到 SQL 数据库,首先需要加载目标数据库的驱动,驱动里面包含着与该数据库交互的逻辑。

  • 在驱动加载之后,需要调用 sql 包的     sql.Open() 函数,这将会得到一个指向 sql.DB 这个 struct 的指针。

    • sql.Open()      函数的两个参数分别是

      • 数据库驱动的名称(例如 Microsoft SQL Server 就是 sqlserver)

      • 数据源名称(数据库连接字符串),不同数据库驱动的数据源名称也不一样。

  • 一旦得到了 *sql.DB,我们就可以发送命令到目标数据,并获取相应的结果。

    • sql.DB 是用来操作数据库的,它代表了 0 个或者多个底层连接的池,这些连接由 sql 包来维护,sql 包会自动的创建和释放这些连接

      • 而且,它对于多个 goroutine 并发的使用是安全的

这里需要注意的是:

  • Open()     函数并不会连接数据库,甚至不会验证其参数。它只是把后续连接到数据库所必需的 structs     给设置好了

  • 而真正的连接是在被需要的时候才进行懒设置的。

此外:

  • sql.DB     不需要进行关闭(当然你想关闭也是可以的)。

  • 它就是用来处理数据库的,而不是实际的连接。

  • 这个抽象包含了数据库连接的池,而且会对此进行维护。

在使用 sql.DB 的时候,可以定义它的全局变量进行使用,也可以将它传递函数/方法里

如何获得驱动?

正常的做法是使用 sql.Register() 函数、数据库驱动的名称和一个实现了 driver.Driver 接口的 struct来注册数据库的驱动。例如:

  • Sql.Open()     函数的两个参数分别是

    • 数据库驱动的名称(例如      Microsoft SQL Server 就是 sqlserver)

    • 数据源名称(数据库连接字符串)

  • sql.Register("sqlserver",     &drv{})

 

但是我们之前的例子却没写这句话,为什么?

因为 Sql Server 的驱动,是在这个包被引入的时候进行了自我注册:

ccff9466b93bf6e8f0710eb517920108.png

  • go-mssqldb 包被引入到时候,它的 init     函数将会运行并进行自我注册(在 Go 语言里,每个包的 init 函数都会在自动的调用)。

  • 在引入     go-mssqldb 包的时候,把该包的名设置为下划线 _,这是因为我们不直接使用数据库驱动(只需要它起的“副作用”),我们只使用     database/sql

    • 这样,如果未来升级驱动,也无需改变代码。

  • Go     语言没有提供官方的数据库驱动,所有的数据库驱动都是第三方驱动,但是它们都遵循     sql.driver 包里面定义的接口

安装数据库驱动

这是安装 Microsoft SQL Server 数据库驱动的例子go get github.com/denisenkom/go-mssqldb

func (*DB) PingContext

  • 上例中的     db.PingContext() 函数是用来验证与数据库的连接是否仍然有效,如有必要则建立一个连接。

    • 这个函数需要一个      Context(上下文)类型的参数,这种类型可以携带截止时间、取消信号和其它请求范围的值,并且可以横跨 API      边界和进程

  • 例中,创建 context     使用的是 context.Background() 函数。该函数返回一个非 nil 的空 Context。它不会被取消,它没有值,没有截止时间。

    • 它通常用在 main      函数、初始化或测试中,作为传入请求的顶级 Context

如果例子程序可以成功连接到数据库,那么它的输出结果就是:Connected!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值