来源:自学PHP网 时间:2019-08-07 16:47 作者:小飞侠 阅读:次
[导读] go语言的sql包原理与用法分析...
本文实例讲述了go语言的sql包原理与用法。分享给大家供大家参考,具体如下: go的sql包是在pkg/database中,里面的两个包sql和sql/driver可以一起看。建议看这个两个包之前可以先看看sql文件夹下的doc.txt。这个文档说了几点比较重要的: 1 这两个包是真正Go风格的包。 2 这使用这两个包就不需要关于并发处理了,也不需要维护自己的数据库连接池了,一旦建立了一个连接,这个连接是可以在各个goroutine之间共用的。 3 sql/driver提供的是数据库的接口,具体的实现还需要自己实现。 先看database/driver包 第一个用到的方法是Register 这个方法将实现了driver.Driver的驱动注册到变量drivers中,当写完一个驱动之后,就需要将驱动注册到sql中才能使用sql包中的这些接口。这个实现了driver.Driver的必须实现了Open方法. driver.Open返回的是driver.Conn,它的三个方法 Prepare : 参数绑定 先看Prepare,这个和php mysql pdo一样的用法 Conn.Prepare("select * from test where a=?") 返回的Stmt结构: Close : 关闭这个statement 看Result里面的方法: LastInsertId() : Insert操作之后获取到的主键id 下面回到Begin,返回了Tx 开始事务之后除了查询之外,就两种行为:Commit和Rollback,这两种行为都是Tx接口的方法 drvier中的结构全是接口性质的,它需要你来实现并注册到Register中。 驱动的具体使用是在database/sql中 首先将几个sql的结构看一遍 首先sql中的结构都是对driver中的结构进行了一层封装,比如像Rows,有个内部属性是rowsi driver.Rows。 对sql的实际操作都是使用driver.Rows里面的接口进行操作的,实际也就是使用你自己实现的driver进行操作。 driver和sql就像插头和一个充满插头的汽车一样,你实现了driver,即实现了这些插头的配置,你就可使用sql这个汽车了。 Result : 和driver中的Result一致,即你如果实现了driver.Result,那你自然就实现了sql.Result。它是个接口,其实没有什么特殊的用处,如果sql包中的所有Result都换成driver.Result也是行的,估计是作者希望返回值不要引用到其他包去,就使用这种方法。 Rows : 基于了driver.Rows, 还在上面扩展了几个其他的方法。拥有方法: Close 从sql.Open开始 返回了sql.DB结构,这个结构是实现了driver.Conn结构,除了Conn已有的Prepare,Begin,Close之外,还直接多了几个查询方法: Driver() : 返回当前驱动 不管Rows还是Row都有个很好用的方法Scan来将数据放到制定的变量中去。 比如下面就是典型的Rows用法
复制代码 代码如下:
rows, err := db.Query("SELECT ...")
... for rows.Next() { var id int var name string err = rows.Scan(&id, &name) ... } Prepare返回Stmt结构 Exec返回Result结构 至于这几个结构也有各自的方法。 希望本文所述对大家Go语言程序设计有所帮助。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com