[ GO语言存储与数据库 | 青训营笔记 ]

85 阅读3分钟

这几年,go语言逐渐成为很多大企业广泛使用的语言,数据存储是一项很重要的技术,而Redis数据库则是一种特别适合于Go语言的数据存储方案。虽然对于一些简单的应用,的确可以使用文件来读写数据(事实上我做的一个Markdown工具就是这么做的),但这样做一来会限制数据结构的可扩展性,二来文件本身的并发读写性能是比较差的,会影响到应用的性能。所以正式的应用都会使用数据库作为存储系统。 常见的关系型数据库有Oracle\MySQL等,今天要使用的是PostgreySQL,这是一个和MySQL类似的免费开源数据库,go对其的支持较好。Go官方提供的用于数据库连接的包为database/sql,使用它创建一个数据库连接池的方式为:package model import ( "database/sql" "log" _ "github.com/lib/pq" ) var Db *sql.DB func init() { var err error connStr := user=bbs dbname=bbs password=bbs_admin port=5433 host=localhost sslmode=disable Db, err = sql.Open("postgres", connStr) if err != nil { log.Fatal(err) } } 结合自己上学期学的一些sqp语句就可以实现基本都功能了。其中可别忘了安装配置Mysql驱动。 sql.Open可以创建一个数据库连接池的引用*sql.DB,利用它我们可以操作数据库。需要注意的是,Open函数本身并不会直接连接数据库,真正的连接动作会推迟到执行SQL语句。这和某些编程语言的方式是不同的,这里仅仅是创建了一个对数据库连接池的引用,所以即使给Open函数传入的“数据库连接字符串”是错误的,这里也并不会报错。 此外,还需要给Open函数传入一个数据库驱动名称,对于PSQL,是postgres。真正的驱动相关数据创建是通过引入相关的包来实现的:_ "github.com/lib/pq",因为这个包仅仅用于生成PSQL驱动模型,不会真的在代码中使用,所以采用匿名导入的方式。Model层主要的作用就是实现相应的CRUD(create\retrieve\update\delete)功能,实际上就是所谓的“增删改查”。可以看到sql.DB主要支持四种SQL操作: Exec,这个最简单,直接执行SQL。 Query,执行SQL查询,并返回一个sql.Rows结构,该结构是一个迭代器,可以使用.Next方法进行迭代,并使用.Scan方法按查询结果的字段位置提取数据。 QueryRow,和Query类似,不同的是只会返回第一条结果,而不是结果集,所以可以直接调用.Row方法提取数据。 Prepare,可以看做是创建一个可以重复使用的SQL,在真正需要执行SQL时再通过.QueryRow或.QueryRows传入参数并执行。在上边的例子中虽然使用了Prepare,但仅调用了一次,并不是很合适,仅作为如何调用的展示。 纵然知道各种理论知识,还是要多练习才能做到熟练运用。