go 中 database/sql接口

一 点睛

Go 官方没有提供数据库驱动,而是为开发数据库驱动定义了一些标准接口,开发者可以根据定义的接口来开发相应的数据库驱动,这样做有一个好处是:只要是按照标准接口开发的代码, 以后需要迁移数据库时,不需要任何修改。

二 sql.Register

该函数存在于 database/sql 包,它的作用是注册数据库驱动,当第三方开发者开发数据库驱动时,都会实现 init 函数,在 init 里面会调用 Register(name string, driver driver.Driver) 完成数据库驱动的注册。

mysql 和 sqlite3 的驱动调用方式。

// https://github.com/mattn/go-sqlite3 驱动

func init() {

    sql.Register("sqlite3", &SQLiteDriver{})

}

// https://github.com/mikespook/mymysql 驱动

// Driver automatically registered in database/sql

var d = Driver{proto: "tcp", raddr: "127.0.0.1:3306"}

func init() {

    Register("SET NAMES utf8")

    sql.Register("mymysql", &d)

}

第三方数据库驱动都是通过调用这个函数来注册自己的数据库驱动名称以及相应的driver实现。在database/sql 内部通过一个 map 来存储用户定义的相应驱动。

var drivers = make(map[string]driver.Driver)

drivers[name] = driver

因此通过 database/sql 注册函数可以同时注册多个数据库驱动,只要不重复。

例如:

import (

    "database/sql"

     _ "github.com/mattn/go-sqlite3"

)

_ 是用来忽略变量赋值的占位符,包引入用到这个符号也是相似的作用,它表示引入后面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值