您的位置:首页 > 其它

杭州-16

2016-04-05 11:42 211 查看
go安装环境中有database/sql这个文件夹,里面的sql.go定义了很多接口。

如func Register(name string,driver driver.Driver){...drivers[name] = driver},然后在第三方开发

的数据库驱动力,都会实现init函数,在init里面会调用这个Register,如sqlite3里面:

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

应该是先引入_"github.com/mattn/go-sqlite3",把包引入,然后在这个包里的init函数里调用.为什么要有

“_”呢,就算没有也会调用init的

driver.Driver是一个数据库驱动的接口,在安装环境的src/database/sql/driver/driver.go里面

,type Driver interface{Open(name string) (Conn,error)},第三方驱动会定义这个函数,解析name,

使用获得的信息来初始化一个Conn并返回它

driver.Conn也是一个接口,里面有Prepare,Close,Begin这些方法

driver.Stmt是一个准备好的状态,里面包含Close,NumInput,Exec,Query方法

type Stmt interface{

Close() error;NumInput() int;Exec(args []Value)(Result,error);Query(args []Value)(Rows,error)}

接口的意义:通过接口的互相嵌套,搭建了一个框架,更加规范和标准

第三方驱动可以支持标准的database/sql标准,也可以采用自己的实现接口

使用MySql数据库示例:

先引入需要包,如第三方驱动,和安装环境的database/sql

在main函数中,用sql.Open(),打开数据库对象,第一个参数为数据库类型,第二个参数为

数据库资源名(有固定格式),函数返回db,err

调用db.Prepare(),参数为sql语句,返回准备完毕的执行状态和err,把前者赋值给stmt

调用stmt的Exec方法,参数为sql语句中问号的值,返回值为res和err

调用res的LastInsertId(),返回值为刚才插入的id

打印id

orm object relation mapping

beedb是支持database/sql标准接口的orm库,只要第三方数据库支持database/sql就可以无缝接入beedb

zcmlc

尽量不修改前端页面

beego

type NewController struct{beego.Controller},beego.Controller实现了beego.ControllerInterface,

而beego.ControllerInterface定义了get,post,Prepare等函数,prepare函数会在get等函数之前执行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: