Go 框架三件套(Web/RPC/ORM) | 青训营

90 阅读3分钟

GORM

GORM是一个Go语言的ORM框架,通过定义struct与数据库表之间的关系,可以实现建模、增删改查等数据库操作。GORM提供简单的API调用实现ORM,支持关联查询、读写分离、事务等功能。使用GORM可以大幅减少数据库操作代码,提高开发效率。GORM是Go Web项目中常用的数据库库之一。

KITEX

KITEX是一个以Go语言编写的高性能RPC框架,专注于微服务场景,可以用于构建稳定、高效的微服务系统。KITEX定义了简单清晰的IDL语言,通过IDL可以非常方便地定义服务接口和数据模型。KITEX实现了完整的RPC流程,开发者可以快速实现服务端 business logic,并通过客户端轻松调用服务。同时,KITEX还内置了服务治理、负载均衡等服务端功能,以及客户端负载均衡、熔断等机制,可以很好地保障整个微服务系统的高可用性。凭借出色的性能和完善的功能,KITEX已经成为Go语言实现微服务的首选框架。

HERTZ

HERTZ是一款采用Go语言开发的高性能Web框架,接口简单,非常易于学习和使用,可以显著提升Web应用的开发效率。HERTZ内置了便捷的路由机制,开发者可以快速定义请求路由及处理函数。同时,HERTZ还提供了灵活的中间件支持,使得开发者可以方便地实现日志、验证、Tracing等功能。借助HERTZ的高性能运行时,开发者可以轻松构建支持高并发、低延迟的Web服务。HERTZ还支持热重载、跨平台等特性,在保障性能的同时提升开发体验。因此,HERTZ是使用Go语言进行Web应用开发的优秀选择。

三件套使用

GORM使用

导入GORM包:

import "gorm.io/gorm"

连接数据库:

db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})

定义模型:

type Product struct {
  gorm.Model
  Code string
  Price uint
}

创建记录:

product := Product{Code: "D42", Price: 100}
db.Create(&product)

查询记录:

var product Product
db.First(&product, 1) // 通过ID查询

更新记录:

product.Price = 200
db.Save(&product)

删除记录:

db.Delete(&product, 1)

GORM通过定义struct与数据表映射,可以用很简单的代码就实现数据库的基本CRUD操作。

KITEX使用

Kitex 目前对 Windows 的支持不完善。如果本地开发环境是 Windows 的同学建议使用虚拟机或 WSL2。

定义IDL接口:

type HelloReq {
  Name string
}

type HelloResp {
  Message string
}

service Hello {
  @handler NewHello
  getHello(HelloReq) returns(HelloResp)
}

实现服务端:

// 实现NewHello handler
func NewHello(ctx context.Context, req *HelloReq) (resp *HelloResp, err error) {
  // 业务实现
  return
}
// 注册服务
svr := hello.MustNewServer(new(HelloImpl)) 
// 启动服务
err := svr.Run()

客户端调用:

// 构建客户端
c, err := hello.NewClient("localhost:8888", client.WithMessageLogger())

// 调用远程服务
req := &HelloReq{Name: "kitex"}  
resp, err := c.GetHello(ctx, req)

HERTZ使用

导入hertz包:

import "github.com/cloudwego/hertz/pkg/app"

创建服务:

h := hertz.New()

定义路由:

h.GET("/hello", func(c context.Context, ctx *app.RequestContext) {
  // 请求处理逻辑
})

添加中间件:

h.Use(LoggingMiddleware)

启动服务:

h.Spin()

客户端请求:

curl http://localhost:8080/hello

hertz通过封装net/http库,提供了路由、中间件、请求上下文等功能,可以快速构建Go web服务。

以上就是通过上课与看课件加上结合一些网上信息总结出来的笔记~