Go学习笔记:go 操作mysql和Redis

打印 上一主题 下一主题

主题 1009|帖子 1009|积分 3027


1. go 操作mysql

1.1 表准备

  1. CREATE TABLE `user` (
  2.     `user_id` int(11) NOT NULL AUTO_INCREMENT,
  3.     `username` varchar(255) DEFAULT NULL,
  4.     `sex` varchar(255) DEFAULT NULL,
  5.     `email` varchar(255) DEFAULT NULL,
  6.     PRIMARY KEY (`user_id`)
  7.   ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
复制代码
  mysql的前置知识,我们这里就不讲了,可自行去学习mysql教程
  1.2 insert操作

   首先,必要引入mysql驱动
  1. _ "github.com/go-sql-driver/mysql"
复制代码
  1. package mainimport (        "database/sql"        "fmt"        _ "github.com/go-sql-driver/mysql"
  2.         "log"        "time")var DB *sql.DBfunc init()  {        db,err := sql.Open("mysql","root:root@tcp(localhost:3306)/go_learn")        if err != nil {                panic(err)        }        //最大空闲毗连数,默认不设置,是2个最大空闲毗连        db.SetMaxIdleConns(5)        //最大毗连数,默认不设置,是不限制最大毗连数        db.SetMaxOpenConns(100)        // 毗连最大存活时间        db.SetConnMaxLifetime(time.Minute * 3)        //空闲毗连最大存活时间        db.SetConnMaxIdleTime(time.Minute * 1)        err = db.Ping()        if err != nil {                log.Println("数据库毗连失败")                db.Close()                panic(err)        }        DB = db}func save()  {        r,err := DB.Exec("insert into user (username,sex,email) values(?,?,?)","test001","man","001@test.com")        if err != nil {                log.Println("执行sql语句出错")                panic(err)        }        id, err := r.LastInsertId()        if err != nil {                panic(err)        }        fmt.Println("插入成功:",id)}func main()  {        defer DB.Close()        save()}
复制代码
1.3 Select操作

  1. type User struct {
  2.         UserId   int    `db:"user_id"`
  3.         Username string `db:"username"`
  4.         Sex      string `db:"sex"`
  5.         Email    string `db:"email"`
  6. }
  7. func query(id int)  (*User,error) {
  8.         rows, err := DB.Query("select * from user where user_id=? limit 1", id)
  9.         if err != nil{
  10.                 log.Println("查询出现错误:",err)
  11.                 return nil,errors.New(err.Error())
  12.         }
  13.         user := new(User)
  14.         for rows.Next() {
  15.                 if err := rows.Scan(&user.UserId,&user.Username,&user.Sex,&user.Email); err != nil{
  16.                         log.Println("scan error:",err)
  17.                         return nil,errors.New(err.Error())
  18.                 }
  19.         }
  20.         return user,nil
  21. }
复制代码
1.4 Update

  1. func update(username string, id int)  {
  2.         ret, err := DB.Exec("update user set username=? where user_id=?", username, id)
  3.         if err != nil {
  4.                 log.Println("更新出现问题:",err)
  5.                 return
  6.         }
  7.         affected, _ := ret.RowsAffected()
  8.         fmt.Println("更新成功的行数:",affected)
  9. }
复制代码
1.5 Delete

  1. func delete(id int)  {
  2.         ret, err := DB.Exec("delete from user where user_id=?", id)
  3.         if err != nil {
  4.                 log.Println("删除出现问题:",err)
  5.                 return
  6.         }
  7.         affected, _ := ret.RowsAffected()
  8.         fmt.Println("删除成功的行数:",affected)
  9. }
复制代码
1.6 事务

mysql事务特性:

  • 原子性
  • 一致性
  • 隔离性
  • 恒久性
  1. func insertTx(username string)  {
  2.         tx, err := DB.Begin()
  3.         if err != nil {
  4.                 log.Println("开启事务错误:",err)
  5.                 return
  6.         }
  7.         ret, err := tx.Exec("insert into user (username,sex,email) values (?,?,?)", username, "man", "test@test.com")
  8.         if err != nil {
  9.                 log.Println("事务sql执行出错:",err)
  10.                 return
  11.         }
  12.         id, _ := ret.LastInsertId()
  13.         fmt.Println("插入成功:",id)
  14.         if username == "lisi" {
  15.                 fmt.Println("回滚...")
  16.                 _ = tx.Rollback()
  17.         }else {
  18.                 _ = tx.Commit()
  19.         }
  20. }
复制代码
2. go操作Redis

   redis不另行先容,默认会,假如不相识,先去学习redis教程
  安装:go get github.com/go-redis/redis/v8
  1. package main
  2. import (
  3.         "context"
  4.         "fmt"
  5.         "github.com/go-redis/redis/v8"
  6. )
  7. func main()  {
  8.         ctx := context.Background()
  9.         rdb := redis.NewClient(&redis.Options{
  10.                 Addr:          "localhost:6379",
  11.                 Password: "", // no password set
  12.                 DB:                  0,  // use default DB
  13.         })
  14.         err := rdb.Set(ctx, "key", "value", 0).Err()
  15.         if err != nil {
  16.                 panic(err)
  17.         }
  18.         val, err := rdb.Get(ctx, "key").Result()
  19.         if err != nil {
  20.                 panic(err)
  21.         }
  22.         fmt.Println("key", val)
  23.         val2, err := rdb.Get(ctx, "key2").Result()
  24.         if err == redis.Nil {
  25.                 fmt.Println("key2 does not exist")
  26.         } else if err != nil {
  27.                 panic(err)
  28.         } else {
  29.                 fmt.Println("key2", val2)
  30.         }
  31. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

怀念夏天

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表