Go框架三件套(新手版)| 青训营笔记

70 阅读2分钟

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

如有错误欢迎指出

Go框架三件套(Web/RPC/ORM)

什么是Gorm

Go有一个非常方便对数据库进行操作的ORM,支持读写分离,拥有丰富的开源扩展,对于数据库的操作也非常丰富,开发人员友好。

什么是Kitex

Go的微服务RPC框架,具有高性能,强可扩展的主要特点,支持多协议(默认支持 ThriftKitex ProtobufgRPC)并拥有丰富的开源扩展,多传输协议(Kitex 支持的传输协议有 TTHeaderHTTP2)。

什么是HertZ

具有高易用性,高扩展性,高性能,低时延等特点。

Gorm用法(自己尝试的代码)

连接数据库

Gorm连接数据库和直接连接sql有些像,但是你想连接不同的数据库需要下载不同的驱动,我用的是mysql,所以用的是mysql的包。

data := "用户名:密码/数据库名?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(data), &gorm.Config{})
if err != nil {
   errors.New("连接错误")
}

我们要提前建一个结构体(和java的类相似里面的属性是字段名),定义和字段名相同的属性。注意1:可以使用gorm来自定自己的属性限制. 注意2:使用软删时,在结构体中加入Deleted字段 gorm.DeletedAt,在查询里会自动将这个属性默认加上nill

type Producer struct {
   Id      int
   Name    string
   Pnumber int
}

既然是操作数据库,那就离不开CRUD,下面就是对数据库的操作。(前半句是拼sql语句,以Create函数为例,他是finish api,到这里已经完成)

添加

var p Producer
db.Create(&p)

创建一个p对象,对p对象的属性添加值,然后将指针类型的传入到db提供的Create函数,支持创建一个或多个(传对象类型的切片),注:一定是指针类型,否则无法写回

查询

result := map[string]interface{}{}
db.Model(&Producer{}).First(&result)

查询一条语句,查询的结果以map的形式返回。Model里传的是指针类型

db.Table("producers").Take(&result)

Table传的是字符串(表名)

多条查询

var p3 [] Producer
db.Table("producers").Find(&p3)

更新

db.Model(&p).Update("name", "hello")

删除

db.Delete(&p)I

Kitsx

定义IDL

当我们想知道对方接口的规范是什么时,可以用IDL

namespace go api
struct Request {
1:string message
}
struct Respone {
1 :string message
}
service Echo{
      Respone echo(1:Repuest req)
}

Hertz

Hertz的基本使用

func main() {
h := server.Default(server.WithHostPorts("127.0.0.1:8000")) 
h.GET("/proxy/backend",func(c context.Context,ctx *app.RequestContext) { 
c.JSON(200, utils.H{ 
"msg": "Hello", 
 })}) 
}

之前用过gin框架,感觉很相似,这也是开启一个服务,然后有一些GET,POST,DELETE,PUT方法。还有路由组的写法,参数绑定(c.BindAndValidate)和中间件(c.next,c.Abort等) #引用 青训营 GOrm参考[GORM 指南 | 入门指南 |《GORM 中文文档 v2》| Go 技术论坛 (learnku.com)]
Kitex参考www.oschina.net/p/kitex?hms…