Golang语言--【基础知识】访问数据库

对许多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。

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2016-06-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏狂码一生

深入PHP FTP类的详解

FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard (也就是Active,主动方式),一种是 Passive (也就是PASV,被动方式)。...

46380
来自专栏青玉伏案

Objective-C中的Block回调模式

        在前面的博客中提到了Block的概念和使用方法,个人感觉Block最爽的用法莫过于在回调时用block。感觉比委托回调和目标方法回调用着要顺手,...

28150
来自专栏Django Scrapy

python3 将字典,列表等转换成字符串形式存入mysql数据库并复原成字典,列表(处理稍复杂的格式)

我用的数据库版本太低,不能直接存入json,遂将原来json格式的文件转换成字符串 ¥=并用python自带的方法--eval()恢复成原样 例如:将列表里套着...

47180
来自专栏凉城

[教程]黑客级别的批量处理文件

24550
来自专栏钟绍威的专栏

linux常用命令之查阅文件用法选项功能键用法选项DEMO用法选项选项注意选项注意选项注意用法选项

CAT cat – concatenate print files 连续的输出文件内容 用法 cat [-nbA] file 选项 -n line number...

20150
来自专栏gaoqin31

XDebug分析php代码性能

XDebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。是一个C语言扩展包(Windows下扩展名...

42630
来自专栏c#开发者

Asp.net webform scaffolding结合Generic Unit of Work & (Extensible) Repositories Framework代码生成向导

Asp.net webform scaffolding结合Generic Unit of Work & (Extensible) Repositories Fr...

30250
来自专栏python3

python3--进程同步(multiprocess.Lock, Semaphore, Event)

通过之前的学习,实现了程序的异步,让多个任务可以同时在几个进程中并发处理,他们之间的运行没有顺序,一旦开启也不受我们控制。尽管并发编程让我们能更加充分的利用IO...

63330
来自专栏行者常至

hibernate的工作原理

可以实现id自动增加,也就是说,如果往数据库中插入一个name,那么id就自动加1。

8620
来自专栏小白安全

代码审计工具 Cobra 源码分析

0x00 前言 @0r3ak 师傅向我推荐了一款代码审计工具Cobra(wufeifei/cobra),该工具基于Python开发,可以针对多种语言的源...

49170

扫码关注云+社区

领取腾讯云代金券