gozero初学

前言

此时已经过完了go的基础语法,本来要开始学习Gin框架了,但肖佬说这个框架过时了,直接去学gozero,这是一个集成了各种工程实践的web和微服务框架。

微服务

微服务就是一种分而治之的思想,把一个紧密结合的应用解耦,各有各的数据库、接口等,各自发展。

那么它和分布式有什么区别呢?一句话概括就是微服务是分布式架构的一种实现方式的突出演变,就像深度学习与机器学习的关系。

rpc和grpc

RPC(remote prduce call),是一种通信协议,让程序像调用本地函数一样,去调用另一台机器(或另一个进程)上的函数,而不需要了解底层的网络通信细节。

gRPC是Google开发的一款高性能、通用的 RPC 框架,专为微服务架构设计。

grpc初学

g表示google的意思,并不是go,所以这个通信框架是多语言通用的。

在go中使用grpc,首先要写一个.protoc文件,由于这个框架是为通信服务的,所以要在这个文件中写好message结构体,就像定义go结构体那样,然后还得写service,就像这样:

1
2
3
4
5
service StudentService{
rpc GetStudentInfo(Request) returns (Student);
rpc AddStudent(Student) returns (Student);
rpc ListStudents(Empty) returns (StudentList);
}

这两点是基本的,也就是写好消息和服务,然后就可以用一个命令,这个命令会调用插件protoc-gen-go和protoc-gen-go-grpc来生成.go代码,就像这样:
image-20260624184806599

第一个文件中封装的是通信的底层实现,包括http/2的通信逻辑,第二个文件中封装了结构体长什么样以及序列化代码。

初始化一个gozero项目

第一种方式:()

1
goctl api new proj_name

第二:
当项目中已经有一个proj_name.api文件时,cd进项目,然后执行以下命令

1
goctl api go --api proj_name.api --dir . 

然后再执行go mod tidy来下载依赖,完成初始化。

基本目录解析如下:
image-20260620164820908

可用命令goctl api doc –dir . –o ./doc生成doc文档

请求到返回大致流程

在.api文件中定义路由以及结构体(这个结构体和types中的写的一致)->

然后这里定义的路由会被卸载handler下的routes.go中->

routes.go中的handler也就是handler目录下的各个模块的某某handler.go->

然后这个某某.handler.go中会用上logic目录下的函数,这个函数会写最终要return的东西

当我想要新增一个接口时,只需要在.api文件中写好,然后执行那个goctl生成代码的命令,它会帮我生成从routes.go到最后的logic下函数中途中的所有代码,我只需要补充logic下那个函数的返回逻辑

分模块

在.api中,我们用@server()来统一前缀,以用来将路由们分模块。

除了handler可以分模块,也可以建立一个.api目录,把proj_name.api文件分为各个模块。

MySQL的sqlx

和python中的ORM差不多,也是需要定义模型、定义连接什么的,但是感觉go中的跳转有好多,从发起请求到返回响应之间层层链接,中途有极多的文件间跳转、引用。

这会导致牵一发动全身的感觉,我目前感觉很麻烦,所以不得不衍生出一个更简便的ORM框架——GORM

一些重要但容易忘的东西

主要是以Sim为关注对象的。

假如有一个agent服务需要调用mall服务的场景,它是个什么过程呢?

agent的所有服务写在svc目录下,然后agent服务调用mall服务时,由于mall服务通过proto暴露了服务接口,所以agent的svc中只需要导入mall服务的”budgetmatch-sim/services/rpc/mall/client/productservice”,就可以var mallClient productservice.ProductService,这样得到一个mall服务的客户端,然后就可以通过这个客户端调用mall服务的方法了,就像调用本地函数那样。

然后对于每个服务自己的内部服务,例如mall服务有订单和产品两个服务,它会把这两个服务在它的main函数中注册,然后这两个service共用一个server,这个server也就是grpc Server,它占用一个端口。

Icon
致谢名单
本作品由 Hafsun 于 2026-06-20 14:52:28 发布
作品地址:gozero初学
除特别声明外,本站作品均采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 欢迎回家
Logo
上一篇gorm下一篇golang初学