Go语言学习笔记--gorm及docker | 青训营笔记

102 阅读3分钟

听课笔记--第五课第六课

这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记

Gorm使用笔记

"database/sql"包

DSN初始化DB连接

  • 通过rows取回返回的数据
  • 处理完及时释放连接 可能导致服务卡死输入请求没有响应等问题
  • 注意处理rows.Err()错误

连接池

  • 连接池配置
  • 连接池状态
  • Driver连接接口 字符串、结构体

GORM使用

"gorm.io/grom"包

操作数据库、(批量)创建

约定优于配置

关联操作

  • 一条sql不一定比三条性能更优
  • 级联删除,不应使用sql自带的

GORM设计原理

Chain Method和Finisher Method

Gorm实现代码样例

package main
​
import (
    "fmt"
    "time""gorm.io/driver/mysql"
    "gorm.io/gorm"
)
​
//设置表名,可以通过给Food struct类型定义 TableName函数,返回一个字符串作为表名
//不重构TableName方法,gorm会默认将struct类型名加s作为表名 例如User结构体 查询users表而不会查tb_user表
func (v User) TableName() string {
    return "tb_users"
}
​
func main() {
    //db, err := gorm.Open(sqlite.Open("douyin.db"), &gorm.Config{})
    // db,err :==gorgorm.Open(
    //  mysql.Open("user:password@tcp(127.0.0.1:3306)/hello")
​
    username := "root"            //账号
    password := "admin" //密码
    host := "127.0.0.1"           //数据库地址,可以是Ip或者域名
    port := 3306                  //数据库端口
    Dbname := "douyin"            //数据库名
    timeout := "10s"              //连接超时,10秒//拼接下dsn参数, dsn格式可以参考上面的语法,这里使用Sprintf动态拼接dsn参数,因为一般数据库连接参数,我们都是保存在配置文件里面,需要从配置文件加载参数,然后拼接dsn。
    dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout)
    //连接MYSQL, 获得DB类型实例,用于后面的数据库读写操作。
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic("连接数据库失败, error=" + err.Error())
    }
​
    //增
    user := User{ID: "04", User_name: "lwll"}
    result1 := db.Create(&user) //创建用户,并将结果传递出来
    fmt.Printf("%d", result1.RowsAffected)
​
    //删
    var user1 User
    db.Delete(&user1, 04)                         //删除主键为04的数据
    db.Where("User_name=?", "lwl").Delete(&user1) //删除用户名为lwl的数据//查
    result2 := make(map[string]interface{})               //存放查询的结果
    db.Model(&User{}).First(&result2)                     //查询所有结果中的第一个
    db.Model(&User{}).First(&result2, 02)                 //查询主键字段为02的结果
    db.Model(&User{}).Where("ID=?", "02").First(&result2) //查询ID列中元素为02的结果
    fmt.Println(result2)
​
    //改 --本质上就是在查询语句的基础上进行修改
    db.Model(&User{}).Where("ID=?", "02").Update("User_name", "200")
    //Update - 更新多个字段
    db.Model(&User{}).Where("ID=?", "02").Updates(User{User_name: "2001"})
    db.Model(&User{}).Where("ID=?", "02").Updates(map[string]interface{}{"User_name": "200"})
}

dock学习笔记

docker安装

docker安装博客一

docker安装博客二

wsl 升级问题

  • 安装失败,发现未打开wsl功能 解决方法
  • docker仍无法启动,wsl -l -v发现当前版本为wsl1 解决方法
  • 升级Ubuntu为wsl2以后wsl内核出现问题(需要魔法加快速度) 解决方法

docker后续安装步骤

  1. 为docker换源
  2. 为wsl2换源
  3. git安装(魔法下载) 解决参考
  4. 配置环境变量 name、email
  5. postman安装(已完成)
  6. 为wsl2配置GO环境 参考方案 GOPATH=/home/djq/environment/gopath
  7. Kitex示例代码