杭州-16

来源:互联网 发布:淘宝活动流程图片 编辑:程序博客网 时间:2024/06/10 09:16
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等函数之前执行

0 0
原创粉丝点击