[Go] gorm 错误处理 与 链式/Finisher方法

摘要:
使用gorm调用Finisher方法后,建议检查错误。Finishers是一种方法,它将立即执行注册回调,然后生成并执行SQL,例如以下方法:Create、First、Find、Take、Save、Update、Delete、Scan、Row、Rows……方法的完整列表https://github.com/go-gorm/gorm/blob/master/finisher_api.go链式方法是一种修改或向当前语句添加子句的方法,例如Where、Select、Omit、Joins、Scopes、Preload、Raw…如果遇到任何错误,GORM将设置*GORM的error字段。DB=Nil{//processing error…}或ifresult:=DB。其中(“name=?=nil{//正在处理错误…}ErrRecordNotFound错误当First、Last或Take方法找不到记录时,GORM将返回ErrRecordNotFound错误。

使用 gorm 在调用 Finisher 方法之后,建议都进行错误检查。

Finishers 是会立即执行注册回调的方法,然后生成并执行 SQL,比如这些方法:

Create, First, Find, Take, Save, Update, Delete, Scan, Row, Rows…

完整方法列表 https://github.com/go-gorm/gorm/blob/master/finisher_api.go
链式方法是将 Clauses 修改或添加到当前 Statement 的方法,例如:

Where、Select、Omit、Joins、Scopes、Preload、Raw(但在构建 SQL 语句时,Raw 不能与其它链式方法一起使用)…

完整方法列表 https://github.com/go-gorm/gorm/blob/master/chainable_api.go

创建记录:

user := User{Name: "Jin", Age: 18, Birthday: time.Now()}

result := db.Create(&user) // 通过数据的指针来创建

user.ID             // 返回插入数据的主键
result.Error        // 返回 error
result.RowsAffected // 返回插入记录的条数

处理错误:

GORM 的错误处理与常见的 Go 代码不同,因为 GORM 提供的是链式 API。

如果遇到任何错误,GORM 会设置 *gorm.DB 的 Error 字段。

您需要像这样检查它:

if err := db.Where("name = ?", "jinzhu").First(&user).Error; err != nil {
  // 处理错误...
}

或者 

if result := db.Where("name = ?", "jinzhu").First(&user); result.Error != nil {
  // 处理错误...
}

ErrRecordNotFound 错误

当 FirstLastTake 方法找不到记录时,GORM 会返回 ErrRecordNotFound 错误。

如果发生了多个错误,你可以通过 errors.Is 判断错误是否为 ErrRecordNotFound,如:

// Check if returns RecordNotFound error
err := db.First(&user, 100).Error
errors.Is(err, gorm.ErrRecordNotFound)

Errors 错误

https://github.com/go-gorm/gorm/blob/master/errors.go

Link:https://www.cnblogs.com/farwish/p/14225964.html

免责声明:文章转载自《[Go] gorm 错误处理 与 链式/Finisher方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇FMXUIpyspark mongodb yarn下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

secureCRT 同时向多个窗口发送命令

当多个服务器需要安装相同的软件服务时,为每个服务执行相同的命令是很麻烦的,并且当一个服务器执行时可能会遗漏一些内容。因此,同步执行命令非常重要。SecureCRT为我们提供了这样一个功能。在交互式窗口对话框中输入命令以查询中心#ipaddr3.1窗口的IP地址。此时,窗口将执行该命令。...

微信扫码网页登录,redirect_uri参数错误解决方法

对于微信开放平台[管理中心/应用程序详细信息]中设置的[开发信息][授权回调域],只需填写域名,无需https://,也无需特定页面。您不需要填写完整的请求路径,如图所示:https://open.weixin.qq.com/connect/qrconnect?appid=您的APPID&direct_Uri=回调和响应的特定地址_type=code...

OpenWrt路由器通过LuCI界面实现Guest SSID功能

此外,OpenWrt路由器上的访客SSID不会受到主SSID的MAC地址过滤功能的影响,这是番茄路由器的优势。...

Visual studio之C#实现数字输入模拟键盘

所以我想自己实现软键盘。这篇文章是来做记录的。在Load event表单中,添加所有标签控件的click event mybutton _ clicked,privatevoidlazerctrl _ Load{//注册键盘,单击事件keyb1。单击+=newEventHandler;keyb2。单击+=newEventHandler,keyb3。单击++=...

mysql修改字段防止锁表

步骤1:修改大表、addcolumn或dropcolumn的字段,操作完成后将锁定该表。此时,查询ok、insert和update将等待锁定。...

WritableWorkbook 详细用例 (转)

1WritableWorkbookworkbook=工作簿.createWorkbook(newFile(“d:\test.xls”));1Workbookwb=工作簿.getWorkbook(newFile(“src\test\test.xls”));...