golang gorm错误处理事务及日志的使用方法
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要讲解了"golang gorm错误处理事务及日志的使用方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"golang gorm错误处理事务
千家信息网最后更新 2025年11月08日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安全错误
数据库的锁怎样保障安全
企业信息网络安全管理员证书
潭州课堂软件开发可靠吗
redis 清除分组数据库
网络安全保卫总队干嘛的
二年级有关网络安全宣传漫画
华为gaussdb数据库 河南
软件开发每天都干什么
python数据库适配器
大学网络安全黑板报
方舟生存进化手游稳定的服务器
网络安全找钱吗
2018河北网络安全周
舌癌数据库
sqlplus查询数据库错误
dmm这个服务器不能用怎么办
服务器离线报警
公安部网络安全条例g17
重庆2d相机软件开发
悠久之树服务器错误代码500
软件开发云技术
服务器加载不动需要增加空间吗
期刊 万方 服务器报错
数据库的拼音怎么打
路由器网络安全认证
深圳通联网络技术金融有限公司
怎么把教材弄成数据库
python服务器在哪里
数据库事务 实现
辐射4登录无服务器
长沙专门做软件开发的公司