Go Web,RPC,ORM | 青训营笔记

67 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

今天讲解的是Go框架的三件套,分别是Gorm,Hertz,Kitex。

Gorm

在使用gorm之前需要先初始化数据库。之后进行增删改查。 gorm有个特点是链式调用,可以较为方便的使用。通过链式调用的.Error可以判断是否出现错误。

//处理冲突
p := &Product{Code: "D42", ID: 1]
db. CLauses(cLause.OnConflictfDONothing: true)).Create(&p)

如何使用默认值,用gorm的标签:gorm:"default:defaultParam:"

查询的坑

使用first时,没有数据时会返回errrecordnotfound,而find就不会。因此要多用find。

使用结构体作为查询条件时,为0值不会用于查询条件,因此要用map。

// IN SELECT * FROM users WHERE name IN ('jinzhu','jinzhu 2');
db.Where( query: "name IN ?", [lstring("jinzhu", "jinzhu 2"+). Finc(&users) 
// LIKE SELECT * FROM USCrs WHERE namc LIKE '%jin%'; 
db.Mhere( query: "name LIKE ?", args.. "%jin%"). Finc(&users)
// AND SELECT * FROM users WHERE nome ='jinzhuk AND age >= 22;
 db.Mhere( query: "name = ? AND age >= ?", args.."jinzhu", "22"). Find(&users)
 / SQL
// UPDATE "products" SET "price" = price * 2 + 186, "updoted_at" = '2813-11-17 21:34:10' WHERE "id" = 3; db.Model(&User{ID: 111)-).Updatc( column: "age", gorm.Expr( expr: "agc * ? + ?", args..: 2, 100)

gorm的事务建议使用transaction方法。 gorm的hook是指在CRUD之前或者之后调用的函数,如果出现任何错误就会回滚。

kitex

定义IDL

使用kitex -modile example -service命令生成代码。 build.sh:构建脚本 handler.go IDL service:用户定义的服务

服务发现与注册: kitex已经对接了主流的服务注册与发现中心,如ETCD,Nacos。

服务注册,就是将提供某个服务的模块信息(通常是这个服务的ip和端口)注册到1个公共的组件上去(比如: zookeeper[consul](so.csdn.net/so/search?q…

服务发现,就是新注册的这个服务模块能够及时的被其他调用者发现。不管是服务新增和服务删减都能实现自动发现。

Hertz (Go的http框架)

HertzBind, Validate BindAndValidate

Hertz的中间件: 分为服务端和客户端的中间件,用c.Abort中止调用链执行。

Hertz也提供了http client用于帮助用户发送http请求。

项目介绍

使用之前三者的具备一定业务逻辑的笔记后端项目。 有三个服务,如下所示:

截屏2023-01-20 15.06.10.png

截屏2023-01-20 15.07.05.png

截屏2023-01-20 15.07.55.png