IT评测·应用市场-qidao123.com
标题:
Go语言(Golang)数据库编程
[打印本页]
作者:
梦见你的名字
时间:
2023-5-11 10:10
标题:
Go语言(Golang)数据库编程
Go 数据库编程
一、连接数据库
准备连接到数据库
要想连接到 SQL 数据库,首先需要加载目标数据库的驱动,驱动里面包含着于该数据库交互的逻辑。
sql.Open()
数据库驱动的名称
数据源名称
得到一个指向 sql.DB 这个 struct 的指针
sql.DB 是用来操作数据库的,它代表了0个或者多个底层连接的池,这些连接由sql 包来维护,sql 包会自动的创建和释放这些连接
它对于多个 goroutine 并发的使用是安全的
package main
import (
"context"
"database/sql"
"fmt"
"log"
_ "github.com/denisenkom/go-mssqldb"
)
var db *sql.DB
const (
server = "xxxx.database.windows.net"
port = 1433
user = "xxxxx"
password = "xxxxx"
database = "go-db"
)
func main() {
connStr := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;",
server, user, password, port, database)
db, err := sql.Open("sqlserver", connStr)
if err != nil {
log.Fataln(err.Error())
}
ctx := context.Background()
err = db.PingContext(ctx)
if err != nil {
log.Fataln(err.Error())
}
fmt.Println("Connected!")
}
复制代码
Note
Open() 函数并不会连接数据库,甚至不会验证其参数。它只是把后续连接到数据库所必需的 structs 给设置好了
而真正的连接是在被需要的时候才进行懒设置的
sql.DB 不需要进行关闭(当然你想关闭也是可以的)
它就是用来处理数据库的,而不是实际的连接
这个抽象包含了数据库连接的池,而且会对此进行维护
在使用 sql.DB 的时候,可以定义它的全局变量进行使用,也可以将它传递到函数/方法里。
如何获得驱动
正常的做法是使用 sql.Register() 函数、数据库驱动的名称和一个实现了 driver.Driver 接口的 struct,来注册数据库的驱动。例如:
sql.Register("sqlserver", &drv{})
但是我们之前的例子却没写这句话,为什么?
因为 Sql Server 的驱动,是在这个包被引入的时候进行了自我注册
驱动自动注册
当 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。
Exercises
使用 PostgreSQL 建立数据库,使用 Go 语言进行连接,并 Ping 一下。
使用 SQLite 建立数据库,使用 Go 语言进行连接,并 Ping 一下。
连接MySQL
https://github.com/go-sql-driver/mysql
go get -u github.com/go-sql-driver/mysql
复制代码
创建目录
[code]➜ mcd go_sql_demoCode/go/go_sql_demo via
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4