// Create db.Create(&Product{Code: "D42", Price: 100}) 对应增删改查中的“增”,以指定数据值在指定数据库的数据表中创建一条记录,额外的,你可以注意到你无须为...First 方法返回符合指定条件的首个记录值;值得注意的是,使用 First 方法进行查询时,如果查找不到数据会返回 ErrRecodeNotFound 错误。...可以使用 Find 查询多条记录,而 Find 方法在查询不到数据的时候并不会返回错误。...如果任何回调返回错误,GORM 将停止后续的操作并回滚事务。...最后一个参数则为该服务的 IDL 文件。
本节我们仅需创建一个空的数据库,就可以了。表结构在下一节使用gorm迁移功能创建。 使用Navicat工具新建界面如下图。 ?...创建表模型 gorm中的Automigrate()操作,用于刷新数据库中的表,使其保持最新。即让数据库之前存储的记录的表字段和程序中最新使用的表字段保持一致(只增不减)。...import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) 第二项我们仅导入而不使用。...API功能 上一节规划的路由中,我们声明了5个函数,本节逐一实现这5个函数。注意API返回数据都是JSON格式。 为了统一返回状态码,对于正确响应的,返回HTTP CODE = 200。...测试获取单条数据,这里使用id=10这一条,执行如下指令 curl -s -X GET http://localhost:9089/api/v1/todo/10 返回结果如下: {"data":{"id
/api API 包是将所有 API 端点按照其服务目的分组到子包中的文件夹。这意味着,我希望特定的包来解决特定的问题。...当然,这是个好主意,因为我仅针对需要该变量的实例传递了该变量,因此,我不会降低速度质量。但这对于开发或重构来说非常耗时,因为我需要一直将配置从一个函数传递给另一个函数,因此最后,您想杀死自己,嗯...../db.go 此文件保留 GORM 的所有重要配置。因此在此文件中,我创建了一个函数,该函数以对象的形式返回到数据库的连接,该函数将在 main.go 中调用并传递给所有需要与数据库交互的 API。...// NewDatabase 返回一个新的数据库客户端连接 func NewDatabase(config config.Database) (gorm.DB, error) { db, err :=...在本文中,您将了解 API 以及如何构建体系结构,如何通过 Web 服务与数据库进行交互,如何使用 JWT 创建配置文件、处理客户机和服务器之间的安全性和权限,以及如何使用其他软件包简化工作,最后,您学习了如何使用
v3.0.1 ) replace ( gorm.io/gorm v1.25.2 => gorm.io/gorm v1.25.7 ) go.mod文件通常由以下几部分组成: module... major(主版本号): 当做了不兼容的API修改时,一般是重大架构、技术、功能升级,API已经不兼容原来的版本 minor(次版本): 当做了向下兼容的功能性新新增,一般是正常的版本...、功能迭代,要求API向后兼容 patch(修订版本号):当做了向下兼容的问题修正,要求API向后兼容 假设我们需要引入依赖github.com/robfig/cron,选择任何v1.x.y都是兼容现在的代码的...正常情况下,每个依赖包版本会包含两条记录: 第一条记录为该依赖包版本整体(所有文件)的哈希值, 第二条记录仅表示该依赖包版本中go.mod文件的哈希值 github.com/BurntSushi/toml...BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 如果该依赖包版本没有go.mod文件,则只有第一条记录
发出错误的 Go 语言中最常用的技术是将错误作为返回的最后一个值。 Panic 通常意味着发生了意外错误。主要用于在不应该在正常操作期间发生的错误或我们无法优雅处理的错误时快速失败。...Gorm GORM 是针对Golang的出色ORM库,旨在使开发人员友好。它是用于处理关系数据库的ORM库。此gorm库是在database/sql包的基础上开发的。...Go Fiber Go Fiber 是受Express启发的Golang框架。Go Fiber 是建立在快速HTTP之上的Web框架。它可以用于处理路由/端点、中间件、服务器请求等操作。...从那里,它提供了一种在Go中快速构建Web应用程序的简单API。 Logging Go具有内置功能,使程序员更容易实现日志记录。第三方也构建了额外的工具,以使日志记录更加容易。...的查询语言,它提供了一个服务,优先考虑仅提供客户端请求的数据而不是更多数据。
Golang可以通过Gorm包来操作数据库,所谓ORM,即Object Relational Mapping(数据关系映射),说白了就是通过模式化的语法来操作数据库的行对象或者表对象,对比相对灵活繁复的...,Go lang错误处理机制EP11 最后,使用defer关键字在所有逻辑执行后关闭Mysql数据库链接。 ...编译执行后,程序返回: 链接Mysql成功 当然Gorm并不仅仅只能操作Mysql,其他主流数据库也都支持,比方说Sqllite3,事实上,在成本有限或者缓存体系比较完备的情况下,Sqllite3...将刚才入库的数据查询出来: // 查询 a := new(ArticleInfo) db.First(a) fmt.Println(a) 这里通过new关键字初始化结构体,然后使用First函数获取第一条记录...: []main.ArticleInfo更新了 1 条数据 更新了 1 条数据 结语 目前Golang的比较流行的ORM包除了Gorm,还有Xorm,对比Python数据库ORM的百花齐放
BY id LIMIT 1;// 获取一条记录,不指定排序db.Take(&user)//// SELECT * FROM users LIMIT 1;// 获取最后一条记录,按主键排序db.Last...users;// 通过主键进行查询 (仅适用于主键是数字类型)db.First(&user, 10)//// SELECT * FROM users WHERE id = 10;Where// 获取第一条匹配的记录...,或者通过给定的条件下初始一条新的记录(仅适用与于 struct 和 map 条件)。...,或者通过给定的条件创建一条记录 (仅适用与于 struct 和 map 条件)。...:当删除一条记录的时候,你需要确定这条记录的主键有值,GORM会使用主键来删除这条记录。
Go(又称 Golang)是由 Google 设计开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。近年来,它已成为构建微服务和云原生应用的最受欢迎的语言之一。...显式错误处理:通过多返回值强制开发者处理错误,使得代码更健壮,故障更容易被追踪和发现,这对于构建高可用的分布式系统至关重要。...API 网关:Kong。命令行工具:Terraform, Etcd, Prometheus 的客户端库等。...标准库 net/http:很多时候,仅使用标准库就已足够。...定义 API 端点r.GET("/users/:id", func(c *gin.Context) {id := c.Param("id")var user Userif result := db.First
组件分享之后端组件——Golang中的ORM组件gorm 背景 近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件...组件基本信息 组件:gorm 开源协议: MIT License 使用与下载:https://gorm.io/zh_CN/ 内容 以前使用Java开发时经常使用到orm包,那在Golang中有没有合适的...进行 CRUD SQL 构建器,Upsert,锁,Optimizer/Index/Comment Hint,命名参数,子查询 复合主键,索引,约束 自动迁移 自定义 Logger 灵活的可扩展插件 API..., "D42") // 查找 code 字段值为 D42 的记录 // Update - 将 product 的 price 更新为 200 db.Model(&product).Update...Price", 200) // Update - 更新多个字段 db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // 仅更新非零值字段
= nil { // 若邮箱/用户名重复(MySQL 唯一索引冲突),返回友好错误 if errors.Is(err, &gorm.ErrDuplicatedKey{}) {...= nil { // GORM 未找到记录的错误 if errors.Is(err, gorm.ErrRecordNotFound) { return...第五步:HTTP 处理器(Handler)—— 处理请求与响应在 internal/handler/user.go 中实现 API 接口的请求解析、调用 Service、返回响应:gopackage handlerimport...返回成功响应(200 OK) c.JSON(http.StatusOK, gin.H{"data": user})}// GetUserListHandler 分页查询用户列表接口(GET /api.../cmd/api# 第二阶段:生成最终镜像(基于轻量级 Alpine 镜像,仅包含二进制文件)FROM alpine:3.19# 设置工作目录WORKDIR /app# 从 Builder 阶段复制二进制文件
golang也有很多优秀的orm框架,今天就来介绍介绍gorm。...Many, Polymorphism 热加载 支持原生sql操作 事务性 链式api 支持的数据库有:mysql、postgre、sqlite、sqlserver 查询操作 以上是gorm的功能,至于为什么是...gorm?...l1212的product 插入 // 创建 db.Create(&Product{Code: "ik01001", Price: 1000}) 构造已给对象,直接调用 db.Create() 就可以插入一条记录... tx.Commit() return nil } 事务的处理也很简单,用 db.Begin() 声明开启事务,结束的时候调用 tx.Commit(),异常的时候调用 tx.Rollback() 最后
知识分享之Golang——gorm的结构体常用标签 背景 知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。...知识分享系列目前包含Java、Golang、Linux、Docker等等。...开发环境 系统:windows10 语言:Golang 组件库:Bleve golang版本:1.18 组件官网:https://gorm.io/ 组件仓库:gorm 开源协议:MIT License...gorm:"column:usr_id;" primaryKey 是否是主键 gorm:"column:usr_id;primaryKey" unique 是否唯一 gorm:"column:usr_id...:"<-:create;column:usr_id" ->:false;仅创建 gorm:"->:false;<-:create;column:usr_id" // 覆盖User结构体使用的表名
2.GORM 是什么 GORM 是一个流行的 Golang ORM 库。 类似于 Java 生态里大家听到过的 Mybatis、Hibernate、SpringData 等。...good.Name = "小米" // 最后写回。 db.Save(&user) 再如更改单列。 // 条件更新 db.Model(&User{}).Where("active = ?"...name='hello', age=18, active=false, updated_at='2013-11-17 21:34:10' WHERE id=111; 9.删除(Delete) 如删除一条记录...删除一条记录时,删除对象需要指定主键,否则会触发 批量 Delete,例如: // Email 的 ID 是 `10` db.Delete(&email) // DELETE from emails where...但 GORM 会将 DeletedAt 置为当前时间, 并且你不能再通过普通的查询方法找到该记录。 使用 Unscoped 方法查找被软删除的数据。
2.GORM 是什么 GORM 是一个流行的 Golang ORM 库。 类似于 Java 生态里大家听到过的 Mybatis、Hibernate、SpringData 等。..., price).Count(&c).Error return c, err } 查询记录是否存在 在 GORM 中,可以使用 Count 方法来判断一个查询是否返回了记录。...因为 Count 方法只计算匹配条件的记录数,而不需要加载和返回记录的实际内容。但是,它可能会有一些微小的开销,因为它需要向数据库发送一个额外的 COUNT(*) 查询来计算记录数。...Limit 指定要检索的最大记录数, Offset 指定在开始返回记录之前要跳过的记录数。...删除一条记录时,删除对象需要指定主键,否则会触发批量 Delete,例如: // Email 的 ID 是 10。
gorm.Model 是包含了一个 ID , CreateAt, UpdateAt, DeletedAt 四个字段的 Golang 结构体 // gorm.Model 定义 type Model struct.../zh_CN/docs/query.html func main() { defer db.Close() //根据逐渐查询第一条记录 var animal Animal db.First(...&animal) fmt.Println("ani", animal) //根据逐渐查询最后一条记录 var animal2 Animal db.Last(&animal2) fmt.Println...(animal2) //指定某条记录(仅当主键为整型时可用) var animal3 Animal db.First(&animal3, 2) fmt.Println(animal3) /.../where条件 //符合条件的第一条记录 var animal4 Animal db.Where("name = ?"
} 二、gorm 框架使用 Gorm 是 golang 的一个 orm 框架,它提供了对数据库操作的封装,使用起来相当便利。...UpdateTime: time.Now(), } db.Table("banner").Create(&banner) // 通过数据的指针来创建 构造已给对象,直接调用 db.Create() 就可以插入一条记录...Find 方法与 First 的逻辑很像,First 增加了一个 Limit(1), 而 Find 没有 获取一条数据 var array []Banner db.Table("banner").Limit...(四)--自定义业务错误信息[5] 从零开发区块链应用(五)--golang 网络请求[6] ---- 参考资料 [1] toString: https://learnblockchain.cn/people.../3835 [2] 从零开发区块链应用(一)--golang配置文件管理工具viper: https://learnblockchain.cn/article/3446 [3] 从零开发区块链应用(二)
GORM(Golang Object Relational Mapping)是一个用于 Golang 的对象关系映射(ORM)库。 当需要插入或更新记录时,一般使用 Save 方法。...在使用 Save 方法多次更新同一条记录到 MySQL 时,却遇到了一个奇怪的问题。...2.问题 在使用 GORM v1.24.6 时,在并发调用 Save 方法更新同一个记录会报如下错误: Error 1062 (23000): Duplicate entry 'xxx' for key...无独有偶,我发现在 GORM Github 仓库已经有人提了类似的 Issues。...多次调用 Save 更新同一条记录时,发现记录没有被更新,则认为是新记录,便进行插入,然后就出现了主键冲突的错误。
GORM 将生成一条 SQL 来插入所有数据,以返回所有主键值,并触发 Hook 方法。 当这些记录可以被分割成多个批次时,GORM会开启一个事务来处理它们。...当查询数据库时它添加了 LIMIT 1 条件,且没有找到记录时,它会返回 ErrRecordNotFound 错误// 获取第一条记录(主键升序)db.First(&user)// SELECT * FROM...users ORDER BY id LIMIT 1;// 获取一条记录,没有指定排序字段db.Take(&user)// SELECT * FROM users LIMIT 1;// 获取最后一条记录...First and Last 方法会按主键排序找到第一条记录和最后一条记录 (分别)。 只有在目标 struct 是指针或者通过 db.Model() 指定 model 时,该方法才有效。...包括零值字段的所有字段)db.Model(&user).Select("*").Omit("Role").Updates(User{Name: "jinzhu", Role: "admin", Age: 0})删除删除一条记录删除一条记录时
最后要提醒一下,本文不会过多介绍gorm的使用,更多的会注重gorm的内部逻辑。建议没有使用过gorm的大佬先收藏,等使用一段时间gorm后再回看,效果更佳。...目前各个语言都有自己比较流行的ORM框架,Java有Mybatis工具、Python有Django ORM,Golang则对应本文的主角Gorm。...First、Last会根据主键进行排序然后通过limit 1返回第一条记录,Find则是查询满足条件的所有记录,然后在代码层面映射第一条记录到结果对象中,相较前两者的性能较低。...var users []User // First 查询第一条符合条件的记录,SQL 会自动加 LIMIT 1 db.Where("age > ?"...当查询满足某条件的多个对象时使用Find,可以一次性查找出满足条件的所有记录。 First、Last、Take使用场景: 当查询条件是范围查询且只需要查询一条记录时使用First、Last、Take。
可以有第三个选择 golang圈子不大,微服务框架框架屈指可数:除了go-micro、go-kit,几乎没有其他选择。go-zero为此提供第三个可能。...git clone https://github.com/tal-tech/go-zero cd go-zero/tools/goctl go build goctl.go 最后生成goctl.exe...hello go mod init hello 定义hello.api 本文设计API如下 描述 格式 方法 参数 返回 用户注册 /open/register post mobile:手机号,passwd...最后代码结构如下 #tree /F /A | go.mod | go.sum | hello.api | open.go | +---etc | open-api.yaml...V2 金珠大佬升级了Gorm V2,集成测试一下吧 配置文件 配置文件在etc/open-api.yaml Name: open-api Host: 0.0.0.0 Port: 8888 DataSourceName