(8)go-micro微服务Mysql配置
目录
						
							
						
						
						
						
						
					- MySQL驱动
二 gorm安装1.1 下载依赖go get -u github.com/go-sql-driver/mysql1.2 使用MySQL驱动func Open(driverName, dataSourceName string) (*DB, error)三 CURD操作- 下面介绍一下gorm的简单用法
 1. 查询为了方便查询,我们事先定义好一个结构体来存储user表的数据。 type user struct { id int age int name string }1.1 单行查询单行查询 db.QueryRow()执行一次查询,并期望返回最多一行结果(即Row)。QueryRow总是返回非nil的值,直到返回值的Scan方法被调用时,才会返回被延迟的错误。func (db *DB) QueryRow(query string, args ...interface{}) *Row具体示例代码: // 查询单条数据示例 func queryRowDemo() { sqlStr := "select id, name, age from user where id=?" var u user // 确保QueryRow之后调用Scan方法,否则持有的数据库链接不会被释放 err := db.QueryRow(sqlStr, 1).Scan(&u.id, &u.name, &u.age) if err != nil { fmt.Printf("scan failed, err:%v\n", err) return } fmt.Printf("id:%d name:%s age:%d\n", u.id, u.name, u.age) }1.2 多行查询多行查询 db.Query()执行一次查询,返回多行结果(即Rows),一般用于执行select命令。参数args表示query中的占位参数。func (db *DB) Query(query string, args ...interface{}) (*Rows, error)具体示例代码: // 查询多条数据示例 func queryMultiRowDemo() { sqlStr := "select id, name, age from user where id > ?" rows, err := db.Query(sqlStr, 0) if err != nil { fmt.Printf("query failed, err:%v\n", err) return } // 关闭rows释放持有的数据库链接 defer rows.Close() // 循环读取结果集中的数据 for rows.Next() { var u user err := rows.Scan(&u.id, &u.name, &u.age) if err != nil { fmt.Printf("scan failed, err:%v\n", err) return } fmt.Printf("id:%d name:%s age:%d\n", u.id, u.name, u.age) } }2. 插入数据插入、更新和删除操作都使用 Exec方法。func (db *DB) Exec(query string, args ...interface{}) (Result, error)Exec执行一次命令(包括查询、删除、更新、插入等),返回的Result是对已执行的SQL命令的总结。参数args表示query中的占位参数。 具体插入数据示例代码如下: // 插入数据 func insertRowDemo() { sqlStr := "insert into user(name, age) values (?,?)" ret, err := db.Exec(sqlStr, "王五", 38) if err != nil { fmt.Printf("insert failed, err:%v\n", err) return } theID, err := ret.LastInsertId() // 新插入数据的id if err != nil { fmt.Printf("get lastinsert ID failed, err:%v\n", err) return } fmt.Printf("insert success, the id is %d.\n", theID) }3. 更新数据具体更新数据示例代码如下: // 更新数据 func updateRowDemo() { sqlStr := "update user set age=? where id = ?" ret, err := db.Exec(sqlStr, 39, 3) if err != nil { fmt.Printf("update failed, err:%v\n", err) return } n, err := ret.RowsAffected() // 操作影响的行数 if err != nil { fmt.Printf("get RowsAffected failed, err:%v\n", err) return } fmt.Printf("update success, affected rows:%d\n", n) }4. 删除数据具体删除数据的示例代码如下: // 删除数据 func deleteRowDemo() { sqlStr := "delete from user where id = ?" ret, err := db.Exec(sqlStr, 3) if err != nil { fmt.Printf("delete failed, err:%v\n", err) return } n, err := ret.RowsAffected() // 操作影响的行数 if err != nil { fmt.Printf("get RowsAffected failed, err:%v\n", err) return } fmt.Printf("delete success, affected rows:%d\n", n) }四 初始化连接- 
在mysql目录下新建mysql.go文件 
- 
写入以下代码: 
 package mysql import ( "github.com/jinzhu/gorm" ) // MysqlInit 初始化数据库 func MysqlInit(user string,pwd string,database string)(*gorm.DB,error){ //连接数据库 db, err := gorm.Open("mysql", user+":"+pwd+"@/"+database+"?charset=utf8&parseTime=True&loc=Local") if err != nil { return db,err } //禁止复表 db.SingularTable(true) //初始化表,只使用第一次 //err = repository.NewUserRepository(db).InitTable() //if err != nil { // logger.Error(err) //} return db,nil }五 使用在main.go文件中编写代码 初始化数据库: db, err := mysql.MysqlInit(micro.ConsulInfo.Mysql.User, micro.ConsulInfo.Mysql.Pwd, micro.ConsulInfo.Mysql.Database) if err != nil { logger.Error(err) return } defer db.Close()六 最后- 
至此,go-micro微服务Mysql配置开发工作就正式完成。 
- 
接下来就开始正式的Redis配置编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。 
 欢迎大家加入 夏沫の梦的学习交流群 进行学习交流经验,点击