golang gorm错误处理事务及日志的使用方法
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要讲解了"golang gorm错误处理事务及日志的使用方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"golang gorm错误处理事务
千家信息网最后更新 2026年11月03日golang gorm错误处理事务及日志的使用方法
这篇文章主要讲解了"golang gorm错误处理事务及日志的使用方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"golang gorm错误处理事务及日志的使用方法"吧!
1. 高级用法
1.1. 错误处理
执行任何操作后,如果发生任何错误,GORM将其设置为*DB的Error字段
if err := db.Where("name = ?", "jinzhu").First(&user).Error; err != nil { // 错误处理...}// 如果有多个错误发生,用`GetErrors`获取所有的错误,它返回`[]error`db.First(&user).Limit(10).Find(&users).GetErrors()// 检查是否返回RecordNotFound错误db.Where("name = ?", "hello world").First(&user).RecordNotFound()if db.Model(&user).Related(&credit_card).RecordNotFound() { // 没有信用卡被发现处理...}1.2. 事物
要在事务中执行一组操作,一般流程如下。
// 开始事务tx := db.Begin()// 在事务中做一些数据库操作(从这一点使用'tx',而不是'db')tx.Create(...)// ...// 发生错误时回滚事务tx.Rollback()// 或提交事务tx.Commit()
1.2.1. 一个具体的例子
func CreateAnimals(db *gorm.DB) err { tx := db.Begin() // 注意,一旦你在一个事务中,使用tx作为数据库句柄 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.3. SQL构建
1.3.1. 执行原生SQL
db.Exec("DROP TABLE users;")db.Exec("UPDATE orders SET shipped_at=? WHERE id IN (?)", time.Now, []int64{11,22,33})// Scantype Result struct { Name string Age int}var result Resultdb.Raw("SELECT name, age FROM users WHERE name = ?", 3).Scan(&result)1.3.2. sql.Row & sql.Rows
获取查询结果为*sql.Row或*sql.Rows
row := db.Table("users").Where("name = ?", "jinzhu").Select("name, age").Row() // (*sql.Row)row.Scan(&name, &age)rows, err := db.Model(&User{}).Where("name = ?", "jinzhu").Select("name, age, email").Rows() // (*sql.Rows, error)defer rows.Close()for rows.Next() { ... rows.Scan(&name, &age, &email) ...}// Raw SQLrows, err := db.Raw("select name, age, email from users where name = ?", "jinzhu").Rows() // (*sql.Rows, error)defer rows.Close()for rows.Next() { ... rows.Scan(&name, &age, &email) ...}1.3.3. 迭代中使用sql.Rows的Scan
rows, err := db.Model(&User{}).Where("name = ?", "jinzhu").Select("name, age, email").Rows() // (*sql.Rows, error)defer rows.Close()for rows.Next() { var user User db.ScanRows(rows, &user) // do something}1.4. 通用数据库接口sql.DB
从*gorm.DB连接获取通用数据库接口*sql.DB
// 获取通用数据库对象`*sql.DB`以使用其函数db.DB()// Pingdb.DB().Ping()
1.4.1. 连接池
db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)
1.5. 复合主键
将多个字段设置为主键以启用复合主键
type Product struct { ID string `gorm:"primary_key"` LanguageCode string `gorm:"primary_key"`}1.6. 日志
Gorm有内置的日志记录器支持,默认情况下,它会打印发生的错误
// 启用Logger,显示详细日志db.LogMode(true)// 禁用日志记录器,不显示任何日志db.LogMode(false)// 调试单个操作,显示此操作的详细日志db.Debug().Where("name = ?", "jinzhu").First(&User{})1.6.1. 自定义日志
db.SetLogger(gorm.Logger{revel.TRACE})db.SetLogger(log.New(os.Stdout, "\r\n", 0))感谢各位的阅读,以上就是"golang gorm错误处理事务及日志的使用方法"的内容了,经过本文的学习后,相信大家对golang gorm错误处理事务及日志的使用方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
错误
事务
日志
处理
数据
数据库
使用方法
方法
学习
内容
多个
字段
情况
接口
记录器
高级
事物
例子
信用
信用卡
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
北京互联网科技公司
期待互联网科技
致骋互联网科技
宜安科技 互联网金融
天扬科技互联网广告
茂名市互联网科技产业园
全球顶尖互联网科技公司
成都铂石互联网科技做什么的
浙江互联网科技研学营
新兴科技互联网创新大赛颁奖典礼
互联网科技和信息
互联网科技研发水平
烟台灵鸽互联网科技有限公司
上海科技产业互联网平台
互联网安防科技感
世界互联网科技成果奖
易租星互联网科技有限公司
瑞安市蟠桃会互联网科技有限公司
利用互联网等科技手段
科技发展第三阶段互联网时代
科技互联网公司装修
科技与互联网发展
北京禾田雨橡互联网科技
互联网科技大会案例
山东吉时兔互联网科技有限公司
银川新华互联网科技职业技术培训学校图片
互联网大会黑科技排名
用友工业互联网科技发展
数字互联网科技有限公司
陕西彩京云互联网科技有限公司