[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
链式方法是将 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 错误
当 First、Last、Take 方法找不到记录时,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方法的更多相关文章
- iOS利用block实现链式编程方法(Objective-C链式编程)
objc利用block实现链式编程方法 因为不好读.block和其他语言的匿名函数一样,很多程序员刚开始很难主动去用他. 本文描述block作为属性的实际使用,看懂block,并讲解如何利用block ...
- 栈的链式存储方法的C语言实现
/* 编译器:Dev-c++ 5.4.0 文件名:linkStack.cpp 代码版本号:1.0 时间:2015年10月15日18:56:06 */ #include <stdio.h> ...
- jQuery链式选择器方法-导航
利用vs新建一个空白web项目, 再用nuget安装jQuery 1.x最新版,目前是 jQuery 1.12.4 新建一个html页面 再将jquery.js拖进新建的页面的头部 最后的html页面 ...
- 顺序队列与链式队列--C语言实现
关于队列,因为我自己在平时使用不多,所以在这里直接将队列的两种存储方式放在一起,作为一篇随笔,这两份代码均可直接运行,亲测.注释写的应该也算比较详细了,就不过多的解释了 顺序队列 #include&l ...
- 【Java】子类的链式调用
记录最近在项目设计中遇到的一个小问题. 前提:有这样两个POJO类,它们都可以通过链式调用的方式来设置其属性值,其中一个类继承了另一个类. 问题:通过链式调用,子类对象访问父类方法后,如何使返回对象仍 ...
- 由表单验证说起,关于在C#中尝试链式编程的实践
在web开发中必不可少的会遇到表单验证的问题,为避免数据在写入到数据库时出现异常,一般比较安全的做法是前端会先做一次验证,通过后把数据提交到后端再验证一次,因为仅仅靠前端验证是不安全的,有太多的htt ...
- jQuery插件编写及链式编程模型小结
JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQu ...
- jQuery链式操作[转]
用过jQuery的朋友都知道他强大的链式操作,方便,简洁,易于理解,如下 $("has_children").click(function(){ $(this).addClass( ...
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
- 数据结构Java实现05----栈:顺序栈和链式堆栈
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...
随机推荐
- 忘记Mysql密码怎么办
1.打开常用的Mysql管理工具 2.这里只是用Navicat举个例子 3.打开mysql数据库 修改密码为123456 update user set authentication_string=p ...
- Java 8 内存管理原理解析及内存故障排查实践
作者:vivo 互联网服务器团队- Zeng Zhibin 介绍Java8虚拟机的内存区域划分.内存垃圾回收工作原理解析.虚拟机内存分配配置,介绍各垃圾收集器优缺点及场景应用.实践内存故障场景排查诊 ...
- 使用systemd部署r-nacos
1. 前言 r-nacos是一个用rust实现的nacos服务.相较于java nacos来说,是一个提供相同功能,启动更快.占用系统资源更小(初始内存小于10M).性能更高.运行更稳定的服务. r- ...
- 详解SSL证书系列(6)了解HTTP及网络基础
使用HTTP协议访问Web 你知道当我们在网页浏览器(比如Chrome)的地址栏中输入URL时,Web网页是如何呈现的吗? Web页面当然不会凭空显示出来.根据Web浏览器地址栏中指定的URL,W ...
- 【论文阅读】NIDS对抗性机器学习综述
基本信息 题目:Adversarial Machine Learning for Network Intrusion Detection Systems: A Comprehensive Survey ...
- KingbaseES数据库安装PostGIS扩展GEOSUnaryunionPrec错误
一.问题现象: KingbaseES V008R006C007B0012数据库集群安装PostGIS扩展插件报错. create extension postgis; ERROR: could not ...
- CSS设置图片根据div的大小等比例缩放
1 .img{ 2 position: absolute; 3 background:url("../images/success.png") no-repeat; 4 width ...
- NodeJS 实战系列:模块设计与文件分类
我们从一个最简单的需求开始,来探索我们应该从哪些方面思考模块设计,以及如何将不同的文件分类.之所以说"思考",是因为我在这篇文章里更多的是提供一类解决问题的范式,而非统一的标准答案 ...
- 18 JavaScript中的三元运算
18 JavaScript中的三元运算 先来看一个例子: let a = 10; let b = 20; let d = a > b? a: b console.log(d); // 20 三元 ...
- #直径#CF804D Expected diameter of a tree
题目 给一片森林,\(q\) 个询问,每个询问两个点, 问将这两个点所在的集合连接起来组成的新集合,它的最远两点的距离的期望值是多少. 分析 首先将以每个点为根的最大深度求出来,然后对于两棵树, 只有 ...