18.蛤蟆笔记go语言——访问数据库
对许多Web应用程序而言,数据库都是其核心所在.
数据库几乎可以用来存储你想查询和修改的任何信息,比如用户信息、产品目录或者新闻列表等。
Go没有内置的驱动支持任何的数据库,但是Go定义了database/sql接口,用户可以基于驱动接口开发相应数据库的驱动
目前NOSQL已经成为Web开发的一个潮流,很多应用采用了NOSQL作为数据库,而不是以前的缓存..
database/sql接口
Go与PHP不同的地方是Go没有官方提供数据库驱动,而是为开发者开发数据库驱动定义了一些标准接口,开发者可以根据定义的接口来开发相应的数据库驱动,这样做有一个好处,只要按照标准接口开发的代码,以后需要迁移数据库时,不需要任何修改。
sql.Register
存在于database/sql的函数是用来注册数据库驱动的,当第三方开发者开发数据库驱动时,都会实现init函数,在init里面会调用这个Register(name string, driver driver.Driver)完成本驱动的注册。
第三方数据库驱动都是通过调用这个函数来注册自己的数据库驱动名称以及相应的driver实现。在database/sql内部通过一个map来存储用户定义的相应驱动。
通过database/sql的注册函数可以同时注册多个数据库驱动,只要不重复。
driver.Driver
Driver是一个数据库驱动的接口,他定义了一个method: Open(namestring),这个方法返回一个数据库的Conn接口。
返回的Conn只能用来进行一次goroutine的操作,也就是说不能把这个Conn应用于Go的多个goroutine里面。
driver.Conn
Conn是一个数据库连接的接口定义,他定义了一系列方法,这个Conn只能应用在一个goroutine里面,不能使用在多个goroutine里面.
driver.Stmt
Stmt是一种准备好的状态,和Conn相关联,而且只能应用于一个goroutine中,不能应用于多个goroutine。
driver.Tx
事务处理一般就两个过程,递交或者回滚。数据库驱动里面也只需要实现这两个函数就可以.
driver.Execer
是一个Conn可选择实现的接口
driver.Result
是执行Update/Insert等操作返回的结果接口定义
driver.Rows
Rows是执行查询返回的结果集接口定义
driver.RowsAffected
是一个int64的别名,但是他实现了Result接口,用来底层实现Result的表示方式
driver.Value
Value其实就是一个空接口,他可以容纳任何的数据
driver.ValueConverter
ValueConverter接口定义了如何把一个普通的值转化成driver.Value的接口
driver.Valuer
Valuer接口定义了返回一个driver.Value的方式
一个驱动只要实现了这些接口就能完成增删查改等基本操作了,剩下的就是与相应的数据库进行数据交互等细节问题了
database/sql
database/sql在database/sql/driver提供的接口基础上定义了一些更高阶的方法,用以简化数据库操作,同时内部还建议性地实现一个conn pool。
有疑问加站长微信联系(非本文作者)