Golang 操作常用数据库
go get github.com/go-sql-driver/mysql
//增:func TestMysqlInsert(){DB, err1 := sql.Open("mysql", user:passwd@tcp(host:port)/DataBaseName)defer DB.Close()//sql.Open()接收驱动名称和一个包含连接目标的字符串,返回对应的连接对象check(err1)dbw, err2 := DB.Prepare("insert into Account(username,userid,passwd,email) values(?,?,?,?)")//Prepare()接收带有占位符?的sql语句,相同格式的查询只需要一次Prepare调用,能够避免SQL字符串拼接的SQL注入问题check(err2)dbr, err3 := dbw.Exec("ligs", "162721", "wasu", "ligs@163.com")//对应占位符//也可以直接使用DB.Exec()直接传入sql语句来执行//DB.Exec("insert into Account(username,userid,passwd,email) values ( "hades", "162721", "2333", "3211@qq.com"))check(err3)row, err4 := dbr.RowsAffected()//返回操作影响的记录数check(err4)log.Println(row)}//添加表 
func TestMysqlTableAdd() {db, err := sql.Open("mysql", user:passwd@tcp(host:port)/DataBaseName)defer db.Close()check(err)res, err2 := db.Exec("create table if not exists Student(name varchar(20),sex char(4),age int,id varchar(15),primary key(id))")check(err2)rs, errors := res.RowsAffected()check(errors)log.Printf("%v rows were influenced", rs)}
//查
func TestMysqlQuery() {db, err := sql.Open("mysql", user:passwd@tcp(host:port)/DataBaseName)check(err)rows, _ := db.Query("select * from Account")defer db.Close()for rows.Next() {//Next()返回下一个记录是否存在var username stringvar userid stringvar passwd stringvar email stringrows.Scan(&username, &userid, &passwd, &email)//Scan()方法将一条记录写入传递的参数中log.Println(username, userid, passwd, email)}}//改
func TestMysqlModify() {db, erro := sql.Open("mysql", user:passwd@tcp(host:port)/DataBaseName)if erro != nil {log.Println(erro)}dbw, erro2 := db.Prepare("update  Account set username=? where userid=?")if erro2 != nil {log.Println(erro2)}dbexec, erro3 := dbw.Exec("hades", "162721")checErro(erro3)rf, erro4 := dbexec.RowsAffected()checErro(erro4)log.Println(rf)}
//删除同理
  • Redis
    • 安装驱动
go get github.com/go-redis/redis

*Redis使用

func TestRedis() {cli := redis.NewClient(&redis.Options{Addr:     "",Password: "",DB:       0,})//初始化连接errors := cli.Set("ligs", "dadada", 0).Err()checErro(errors)log.Println(cli.Get("ligs"))log.Println(cli.Dump("Gopher"))log.Println(cli.Exists("ligs"))cli.Expire("Gopher",50)cli.Keys("*")//redis操作命令对应封装了同名函数,redis的操作可以说是是最简单的了,连接了以后对应的命令都有同名函数
}
go get github.com/lib/pq
func TestPostgresql() {db, erro := sql.Open("postgres", "host= port= user= password= dbname= sslmode=disable")//建立连接checkErro(erro)rows, erro2 := db.Query("select * from account")checkErro(erro2)for rows.Next() {var userid intvar username, password, email, timer stringrows.Scan(&userid, &username, &password, &email, &timer)log.Printf("%v |%v |%v |%v |%v |\n", userid, username, password, email, timer)}}//关系型数据库的操作类似
  • Mongodb:
    • 驱动:gopkg.in/mgo.v2,直接git clone https://gopkg.in/mgo.v2 GOPATH/src/gopkg.in/mgo.v2
func TestMongo() {var user []map[string]stringcli, erro := mgo.Dial(Host)//建立连接,也可以为数据库设定密码连接方式也同样是user:pass@tcp(host:port)/databasename这样的,如果未设定用户直接填ip:port即可defer cli.Close()checkErro(erro)collection := cli.DB("account").C("account")//获取对应的集合collection.Find(nil).All(&user)//查询,一般使用bson.M格式查询log.Println(user)collection.Remove(bson.M{"li": "2333"})//删除对应记录info := map[string]string{"name":     "hades","password": "123456","sex":      "man",}collection.Insert(info)//增,增加如果存在则更新}

关系型数据库的操作基本都是一样的,而非关系型数据库的操作则互不相同,常用的非关系型数据库也就Redis和MongoDB了;