一、简介

database/sql 是一个给sql-like数据库应用的官网库,次要实现了

  1. driver (sql-like)数据库的驱动接口
  2. sql相干的办法

在地址 https://github.com/golang/go/wiki/SQLDrivers有具体实现了database/sql的sql-like驱动库列表

在 go源码 src/database/sql/sql.go
有一个注册driver办法:

func Register(name string, driver driver.Driver) {    driversMu.Lock()    defer driversMu.Unlock()    if driver == nil {        panic("sql: Register driver is nil")    }    if _, dup := drivers[name]; dup {        panic("sql: Register called twice for driver " + name)    }    drivers[name] = driver}

在每一个driver驱动实现,都会调用这个办法。
比方mysql驱动go-sql-driver的实现如下:
在源码 github.com/go-sql-driver/mysql/drver.go

func init() {    sql.Register("mysql", &MySQLDriver{})}

就把go-sql-driver驱动实现,注入到了database/sql中了。
而后咱们应用的时候,就能够这样用了:

import (    "database/sql"    _ "github.com/go-sql-driver/mysql"    "testing")func TestOpen(t *testing.T) {    db, err := sql.Open("mysql", "dns")    t.Log(db, err)}

在这里咱们援用了 _ "github.com/go-sql-driver/mysql"
但却应用 database/sql 外面的办法,因为go-sql-driver只是一个实现。
因为在go-sql-driver咱们注册了 "mysql" 的值,而后就能够在database/sql调用了。