golang mysql 库_Golang MySQL 数据库开发

MySQL以免费、开源、使用方便为优势成为了很多Web开发的后端数据库存储引擎。数据库操作是Web开发中占有极其重要的一部分。数据也是程序最核心的东西。

Go语言作为一门新兴语言他是怎么对Mysql进行开发的呢。

MySQL驱动:

Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的实现接口,常用的有如下几种:

首先我们建立数据库连接:(我在项目中使用了

github.com/jmoiron/sqlx

github.com/jmoiron/sqlx

)

import (

_ "github.com/go-sql-driver/mysql"

"github.com/jmoiron/sqlx" //sqlx 是一个开源的数据库操作库 大家可以去github看看噢

)

const (

//mysql

mysql_user = ""//这里是数据库用户名

mysql_pass = ""//这里是数据库密码

mysql_host = ""//这里是数据库主机

mysql_port = "3306"

database_name = ""//这里是数据库

)

var (

db *sqlx.DB

err error

)

func reconnect() {

if db != nil && db.Ping() == nil {

return

}

db, err = sqlx.Open("mysql", mysql_user+":"+mysql_pass+"@tcp("+mysql_host+":"+mysql_port+")/"+database_name)

if err != nil {

panic(err)

}

db.SetMaxOpenConns(20)

db.SetMaxIdleConns(10)

}

func GetConn() *sqlx.DB {

reconnect()

return db

}

import(

_"github.com/go-sql-driver/mysql"

"github.com/jmoiron/sqlx"//sqlx 是一个开源的数据库操作库 大家可以去github看看噢

)

const(

//mysql

mysql_user=""//这里是数据库用户名

mysql_pass=""//这里是数据库密码

mysql_host=""//这里是数据库主机

mysql_port ="3306"

database_name=""//这里是数据库

)

var(

db *sqlx.DB

err error

)

func reconnect(){

ifdb!=nil&&db.Ping()==nil{

return

}

db,err=sqlx.Open("mysql",mysql_user+":"+mysql_pass+"@tcp("+mysql_host+":"+mysql_port+")/"+database_name)

iferr!=nil{

panic(err)

}

db.SetMaxOpenConns(20)

db.SetMaxIdleConns(10)

}

func GetConn()*sqlx.DB{

reconnect()

returndb

}

如下示例将示范如何使用database/sql接口对数据库表进行增删改查操作:

func Insert(){

GetConn()

//插入数据

stmt, err := db.Prepare("INSERT userinfo SET username=?,departname=?,created=?")

checkErr(err)

res, err := stmt.Exec("astaxie", "研发部门", "2012-12-09")

checkErr(err)

id, err := res.LastInsertId()

checkErr(err)

fmt.Println(id)//当id大于0的时候 说明数据插入成功

}

func Update(){

GetConn()

//更新数据

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)//当affect大于0的时候 说明数更新成功

}

func Delete(){

GetConn()

//删除数据

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)//当affect大于0的时候 说明删除成功

}

func Select(){

//database/sql的查询操作

//查询数据

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)

}

//这是 Sqlx的查询操作 比上面的要简单(个人建议使用sqlx库进行数据库开发)

p := Place{}

pp := []Place{}

// this will pull the first place directly into p

err = db.Get(&p, "SELECT * FROM place LIMIT 1")

// this will pull places with telcode > 50 into the slice pp

err = db.Select(&pp, "SELECT * FROM place WHERE telcode > ?", 50)

// they work with regular types as well

var id int

err = db.Get(&id, "SELECT count(*) FROM place")

// fetch at most 10 place names

var names []string

err = db.Select(&names, "SELECT name FROM place LIMIT 10")

}

func checkErr(err error) {

if err != nil {

panic(err)

}

}

func Insert(){

GetConn()

//插入数据

stmt,err:=db.Prepare("INSERT userinfo SET username=?,departname=?,created=?")

checkErr(err)

res,err:=stmt.Exec("astaxie","研发部门","2012-12-09")

checkErr(err)

id,err:=res.LastInsertId()

checkErr(err)

fmt.Println(id)//当id大于0的时候 说明数据插入成功

}

func Update(){

GetConn()

//更新数据

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)//当affect大于0的时候 说明数更新成功

}

func Delete(){

GetConn()

//删除数据

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)//当affect大于0的时候 说明删除成功

}

func Select(){

//database/sql的查询操作

//查询数据

rows,err:=db.Query("SELECT * FROM userinfo")

checkErr(err)

forrows.Next(){

varuidint

varusernamestring

vardepartmentstring

varcreatedstring

err=rows.Scan(&uid,&username,&department,&created)

checkErr(err)

fmt.Println(uid)

fmt.Println(username)

fmt.Println(department)

fmt.Println(created)

}

//这是 Sqlx的查询操作 比上面的要简单(个人建议使用sqlx库进行数据库开发)

p:=Place{}

pp:=[]Place{}

// this will pull the first place directly into p

err=db.Get(&p,"SELECT * FROM place LIMIT 1")

// this will pull places with telcode > 50 into the slice pp

err=db.Select(&pp,"SELECT * FROM place WHERE telcode > ?",50)

// they work with regular types as well

varidint

err=db.Get(&id,"SELECT count(*) FROM place")

// fetch at most 10 place names

varnames[]string

err=db.Select(&names,"SELECT name FROM place LIMIT 10")

}

func checkErr(errerror){

iferr!=nil{

panic(err)

}

}

Golang MySQL 数据库开发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值