golang gorm错误处理事务及日志的使用方法
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要讲解了"golang gorm错误处理事务及日志的使用方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"golang gorm错误处理事务
千家信息网最后更新 2025年01月18日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安全错误
数据库的锁怎样保障安全
h3c服务器升级阵列卡固件
中铁四局软件开发
软件开发的经济效益分析
东大桥服务器回收
打电话时显示服务器出错什么意思
软件开发的运行维护阶段
查看数据库中所有权限
威胁网络安全内容的有哪些
网络安全人员录用条件
目前常见的网络安全体系结构有
多多返利怎么保存数据库
党员信息管理系统服务器地址
攻击服务器ip有哪些软件
帧是什么意思网络技术
oa系统数据库源代码下载
关于数据库定位记录的卷子
陈业斌数据库答案
支付宝查账单服务器繁忙
30岁软件开发找不到工作
日本高官负责网络安全吗
服务器搭建多个vps
chem3d数据库在哪
老男孩网络安全教程
香港10m服务器租用
sql查数据库表记录个数
国研网数据库主要文献类型
数据库菜单宏怎么做
中国有几家做软件开发的公司
服务器的配置和管理实训课计划
晨溪互联网科技