请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

goweb-访问数据库

[复制链接]
查看: 17|回复: 0

2万

主题

3万

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
81333
发表于 2020-1-14 15:29 | 显示全部楼层 |阅读模式
拜候数据库

对很多Web利用步伐而言,数据库都是其焦点地点。数据库几乎可以用来存储你想查询和点窜的任何信息,比如用户信息、产物目录大要消息列表等。
Go没有内置的驱动支持任何的数据库,可是Go界说了database/sql接口,用户可以基于驱动接口斥地响应数据库的驱动,
现在NOSQL已经成为Web斥地的一个潮水,很多利用采取了NOSQL作为数据库,而不是畴前的缓存
  1. Go database/sql tutorial 里供给了习用的典范及具体的说明。
复制代码
database/sql接口

Go与PHP差别的地方是Go官方没有供给数据库驱动,而是为斥地数据库驱动界说了一些标准接口,斥地者可以按照界说的接口来斥地响应的数据库驱动,这样做有一个优点,只如果依照标准接口斥地的代码, 今后需要迁移数据库时,不需要任何点窜。
在我们操纵database/sql接口和第三方库的时候经常看到以下:
  1.       import (        "database/sql"        _ "github.com/mattn/go-sqlite3"      )
复制代码
新手城市被这个_所迷惑,实在这个就是Go筹划的奇妙之处,我们在变量赋值的时候经常看到这个标记,它是用来疏忽变量赋值的占位符,那末包引入用到这个标记也是类似的感化,这儿操纵_的意义是引入后背的包名而不间接操纵这个包中界说的函数,变量等资本。
包在引入的时候会自动挪用包的init函数以完成对包的初始化。是以,我们引入上面的数据库驱动包以后会自动去挪用init函数,然后在init函数里面注册这个数据库驱动,这样我们便可以在接下来的代码中间接操纵这个数据库驱动了。
这居然在讲怎样斥地一个驱动,我的天,包容我尚才疏学浅,这里还讲了高级用法,惋惜我看不懂o(╥﹏╥)o
操纵MySQL数据库

现在Internet上流行的网站构架方式是LAMP,其中的M即MySQL, 作为数据库,MySQL免得费、开源、操纵方便为上风成为了很多Web斥地的后端数据库存储引擎
sql.Open()函数用来翻开一个注册过的数据库驱动,go-sql-driver中注册了mysql这个数据库驱动,第二个参数是DSN(Data Source Name),它是go-sql-driver界说的一些数据库链接和设备信息。它支持以下格式:
  1. user@unix(/path/to/socket)/dbname?charset=utf8user:password@tcp(localhost:5555)/dbname?charset=utf8user:password@/dbnameuser:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname
复制代码
db.Prepare()函数用来返回预备要实行的sql操纵,然后返回预备终了的实行状态。
db.Query()函数用来间接实行Sql返回Rows成果。
stmt.Exec()函数用来实行stmt预备好的SQL语句
传入的参数都是=?对应的数据,这样做的方式可以必定水平上避免SQL注入。
  1. CREATE TABLE `userinfo` (    `uid` INT(10) NOT NULL AUTO_INCREMENT,    `username` VARCHAR(64) NULL DEFAULT NULL,    `department` VARCHAR(64) NULL DEFAULT NULL,    `created` DATE NULL DEFAULT NULL,    PRIMARY KEY (`uid`));CREATE TABLE `userdetail` (    `uid` INT(10) NOT NULL DEFAULT '0',    `intro` TEXT NULL,    `profile` TEXT NULL,    PRIMARY KEY (`uid`))
复制代码
以下示例将树模怎样操纵database/sql接口对数据库表举行增删改查操纵
  1. package mainimport (    "database/sql"    "fmt"    //"time"    _ "github.com/go-sql-driver/mysql")func main() {    db, err := sql.Open("mysql", "astaxie:astaxie@/test?charset=utf8")    checkErr(err)    //插入数据    stmt, err := db.Prepare("INSERT INTO userinfo SET username=?,department=?,created=?")    checkErr(err)    res, err := stmt.Exec("astaxie", "研发部分", "2012-12-09")    checkErr(err)    id, err := res.LastInsertId()    checkErr(err)    fmt.Println(id)    //更新数据    stmt, err = db.Prepare("update userinfo set username=? where uid=?")    checkErr(err)    res, err = stmt.Exec("astaxieupdate", id)    checkErr(err)    affect, err := res.RowsAffected()    checkErr(err)    fmt.Println(affect)    //查询数据    rows, err := db.Query("SELECT * FROM userinfo")    checkErr(err)    for rows.Next() {        var uid int        var username string        var department string        var created string        err = rows.Scan(&uid, &username, &department, &created)        checkErr(err)        fmt.Println(uid)        fmt.Println(username)        fmt.Println(department)        fmt.Println(created)    }    //删除数据    stmt, err = db.Prepare("delete from userinfo where uid=?")    checkErr(err)    res, err = stmt.Exec(id)    checkErr(err)    affect, err = res.RowsAffected()    checkErr(err)    fmt.Println(affect)    db.Close()}func checkErr(err error) {    if err != nil {        panic(err)    }}
复制代码
操纵SQLite数据库

SQLite 是一个开源的嵌入式关系数据库,实现自包容、零设备、支持事变的SQL数据库引擎。其特点是高度便携、操纵方便、结构松散、高效、牢靠。 与其他数据库治理系统差别,SQLite 的安装和运转很是简单,在大大都情况下,只要确保SQLite的二进制文件存在即可起头建立、毗连和操纵数据库。假如您正在根究一个嵌入式数据库项目或治理计划,SQLite是绝对值得考虑。SQLite可以说是开源的Access。
操纵PostgreSQL数据库

PostgreSQL 是一个自在的工具-关系数据库办事器(数据库治理系统),它在灵活的 BSD-气概答应证下刊行。它供给了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和对专有系统比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server的一种挑选。
PostgreSQL和MySQL比力,它加倍庞大一点,由于它是用来更换Oracle而筹划的。所以在企业利用中采取PostgreSQL是一个明智的挑选。
MySQL被Oracle收买以后正在渐渐的封锁(自MySQL 5.5.31今后的全数版本将不再依照GPL协议),鉴于此,未来我们大要会挑选PostgreSQL而不是MySQL作为项目标后端数据库。
操纵Beego orm库举行ORM斥地

beego orm是这本书的作者斥地的一个Go举行ORM操纵的库,它采取了Go style方式对数据库举行操纵,实现了struct到数据表记录的映照。beego orm是一个很是轻量级的Go ORM框架,斥地这个库的本意低落复杂的ORM进修曲线,尽大要在ORM的运转服从和功用之间追求一个平衡,beego orm是现在开源的Go ORM框架中实现比力完整的一个库,而且运转服从相当不错,功用也底子能满足需求。
beego orm是支持database/sql标准接口的ORM库,所以理论上来说,只要数据库驱动支持database/sql接口便可以无缝的接入beego orm。
NOSQL数据库操纵

NoSQL(Not Only SQL),指的黑白关系型的数据库。随着Web2.0的兴起,传统的关系数据库在对付Web2.0网站,出格是超大范围和高并发的SNS典范的Web2.0纯静态网站已经显得力有未逮,袒露了很多难以克服的题目,而非关系型的数据库则由于其自己的特点获得了很是灵敏的成长。
而Go说话作为21世纪的C说话,对NOSQL的支持也是很好,现在流行的NOSQL严重有redis、mongoDB、Cassandra和Membase等。这些数据库都有高性能、高并发读写等特点,现在已经普遍利用于各类利用中。这本书这一块接下来严重讲了一下redis和mongoDB的操纵。
redis

redis是一个key-value存储系统。和Memcached类似,它支持存储的value典范相对更多,包含string(字符串)、list(链表)、set(聚集)和zset(有序聚集)。
现在利用redis最普遍的应当是新浪微博平台,其次另有Facebook收买的图片交际网站instagram。以及其他一些著名的互联网企业
mongoDB

MongoDB是一个高性能,开源,无形式的文档型数据库,是一个介于关系数据库和非关系数据库之间的产物,黑白关系数据库傍边功用最丰富,最像关系数据库的。他支持的数据结构很是疏松,采取的是类似json的bjson格式来存储数据,是以可以存储比力复杂的数据典范。Mongo最大的特点是他支持的查询说话很是强大,其语法有点类似于面向工具的查询说话,几乎可以实现类似关系数据库单表查询的绝大部分功用,而且还支持对数据建立索引。
现在Go支持mongoDB最好的驱动就是mgo,这个驱动现在最有大要成为官方的pkg。
我们可以看出来mgo的操纵方式和beedb的操纵方式几乎类似,都是基于struct的操纵方式,这个就是Go Style。
这一章严重讲授了Go怎样筹划database/sql接口,然后先容了各类第三方关系型数据库驱动的操纵。接着先容了beedb,一种基于关系型数据库的ORM库,怎样对数据库举行简单的操纵。末端先容了NOSQL的一些常识,现在Go对于NOSQL支持还是不错,由于Go作为21世纪的C说话,那末对于21世纪的数据库也是支持的相当好。
经过这一章的进修,我们学会了怎样操纵各类数据库,那末就诊理了我们数据存储的题目,这是Web里面最严重的一部分,所以盼望大家可以也许深入的去了解database/sql的筹划脑筋。
所以我要深入了解~~~~~~······

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 妈妈网-中国妈妈第一,是怀孕、育儿、健康等知识交流传播首选平台 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表