这是我参与「第五届青训营 」伴学笔记创作活动的第 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请求。
项目介绍
使用之前三者的具备一定业务逻辑的笔记后端项目。 有三个服务,如下所示: