乔克视界 乔克视界
首页
  • 运维
  • 开发
  • 监控
  • 安全
  • 随笔
  • Docker
  • Golang
  • Python
  • AIOps
  • 心情杂货
  • 读书笔记
  • 面试
  • 实用技巧
  • 博客搭建
友链
关于
收藏
  • 分类
  • 标签
  • 归档

乔克

云原生爱好者
首页
  • 运维
  • 开发
  • 监控
  • 安全
  • 随笔
  • Docker
  • Golang
  • Python
  • AIOps
  • 心情杂货
  • 读书笔记
  • 面试
  • 实用技巧
  • 博客搭建
友链
关于
收藏
  • 分类
  • 标签
  • 归档
  • Docker

  • Golang

    • Golang基础知识

    • Golang进阶知识

    • Golang常用包

      • Cobra 使用
      • gorm的简单操作
        • 库安装
        • 数据库连接
        • 数据库操作
          • 表定义
          • 创建表
          • 自动创建
          • 手动创建
          • 插入数据
          • 删除数据
          • 查询数据
          • 修改数据
          • 事务操作
      • Excelize操作excl
      • sjson为json数据设置值
      • gjson解析json数据
      • yaml配置文件解析
      • viper读取配置文件
      • zap日志管理
      • gopsutil获取系统信息
  • AIOps

  • 专栏
  • Golang
  • Golang常用包
乔克
2025-07-17
目录

gorm的简单操作

项目地址:https://github.com/jinzhu/gorm (opens new window)

文档地址:https://godoc.org/github.com/jinzhu/gorm (opens new window)

# 库安装

go get github.com/jinzhu/gorm
1

如果因为网络原因不能安装,可以设置代理。比如在Windows下

set GOPROXY=http://goproxy.cn
1

# 数据库连接

gorm支持多种数据库连接,这里以Mysql为例

import (
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
)

var db *gorm.DB

func init() {
    var err error
    db, err = gorm.Open("mysql", "<user>:<password>/<database>?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        panic(err)
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

或者

package common

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"	
    "log"
)

var db *gorm.DB

// 初始化数据库
func InitDB() *gorm.DB {
	driverName := "mysql"
	host := "localhost"
	port := "3306"
	username := "root"
	password := "coolops"
	dbName := "my_user"
	charSet := "utf8"
	args := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=True&loc=Local",
		username, password, host,port,dbName, charSet,
	)
	db, err := gorm.Open(driverName, args)
	if err != nil {
		log.Println("connect to MySQL failed. err " + err.Error())
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

数据库的连接比较简单,直接使用gorm.Open()即可。

# 数据库操作

# 表定义

type User struct {
	gorm.Model
	UserName  string `gorm:"varchar(20);not null"`
	PassWord  string `gorm:"size 255;not null"`
	Telephone string `gorm:"varchar(11);not null;unique"`
}
1
2
3
4
5
6

gorm用tag的方式来标识MySQL里面的约束。

# 创建表

支持自动创建,也支持手动创建。

# 自动创建
db.AutoMigrate(&User{})
1

会创建一张以users的表。

# 手动创建
if !db.HasTable(&Like{}) {
    if err := db.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8").CreateTable(&User{}).Error; err != nil {
        panic(err)
    }
}
1
2
3
4
5

# 插入数据

user := &User{
    UserName: name,
    Password: password,
    Telephone: telephone,
}
if err := db.Create(user).Error; err != nil{
    return err
}
1
2
3
4
5
6
7
8

# 删除数据

if err := db.Where(&User{Telephone: telephone}).Delete(User{}).Error; err != nil {
    return err
}
1
2
3

# 查询数据

if err := db.Model(&User{}).Where("telephone = ?", telephone).First(&user); err != nil {
    return err
}
1
2
3

先用 db.Model() 选择一个表,再用 db.Where() 构造查询条件,<font style="color:#212529;">db.First(&user)</font>只取第一条记录。

# 修改数据

db.Model(&user).Update("name", "hello")
db.Model(&user).Updates(User{Name: "hello", Age: 18})
db.Model(&user).Updates(User{Name: "", Age: 0, Actived: false}) // nothing update
1
2
3

# 事务操作

func CreateAnimals(db *gorm.DB) err {
    tx := db.Begin()
    if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {
        tx.Rollback()
        return err
    }
    if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {
        tx.Rollback()
        return err
    }
    tx.Commit()
    return nil
}
1
2
3
4
5
6
7
8
9
10
11
12
13

事务的处理也很简单,用 db.Begin() 声明开启事务,结束的时候调用 tx.Commit(),异常的时候调用 tx.Rollback()

上次更新: 2025/07/18, 11:55:50
Cobra 使用
Excelize操作excl

← Cobra 使用 Excelize操作excl→

最近更新
01
2025年,SRE在企业中可以做哪些事
07-18
02
SRE 如何提升自己在团队中的影响力
07-18
03
使用Go开发MCP服务
07-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 乔克 | MIT License | 渝ICP备20002153号 |
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式