GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究

官方文档api-demo教程部分网址如下:

api demo 代码生成 | go-zero Documentation

官方demo的架构如下:

GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第1张图片GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第2张图片编辑

etc包下:

demo-api.yaml

GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第3张图片GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第4张图片编辑
服务名称:demo-api
HOST地址:0.0.0.0监听所有可用网络接口
Port地址:服务运行在8888端口

internal包下:

config/config.go

GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第5张图片GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第6张图片编辑
存储config信息,这里rest.RestConf是RESTful API的结构体,此外还可以添加数据库,缓存配置信息

handler/demohandler.go

GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第7张图片GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第8张图片编辑
输入SvcContext(后面自己定义),返回HandlerFunc函数
三个过程:
解析request的类型,解析错误,返回error(下图为httpx.ErrorCtx源码)
GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第9张图片GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第10张图片编辑
l := logic.NewDemoLogic(r.Context(), svcCtx)的相关代码是我们后面自己定义,
l.Demo实际上充当了业务逻辑的处理过程
失败,返回报错,成功,则带上OK(200状态码)返回

handler/routes.go

GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第11张图片GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第12张图片编辑
这个文件夹的代码由goctl自动生成,注册路由,方法是get,路径是/from/:name(:name代表路径有一个名为name的参数,在后面定义了这个name类型的参数)
[]rest.Route代表了该类型的切片,包含了定义路由的那个结构体

logic/demologic.go

GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第13张图片GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第14张图片编辑在demhandler中用到的代码
DemoLogic结构体:logger(用于记录日志),ctx(请求的上下文信息),svcCtx(服务相关的信息,数据库连接,缓存实例)
NewDemoLogic就是用于New一个DemoLogic实例
Demo方法就是处理request,构造response的方法,具体的业务逻辑代码
type是后面定义的

svc/servicecontext.go

GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第15张图片
用途是通过创建svcCtx来访问config字段,套娃,增强代码的解藕性

types/types.go

GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第16张图片
goctl自动生成,request和response结构体长得样子
name类型被定义,可选为you或者me

demo.api

GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第17张图片
生成routes.go和types.go的文件依据,注册api处理的handler
采用proto3语法(一种数据交换格式)

demo.go

GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第18张图片
主文件,有如下步骤

  • 解析命令行参数
  • 加载配置文件到结构体c中
  • 新建一个rest服务器实例
  • 创建服务上下文。注册handler处理函数
  • 启动rest服务器

启动服务

image.png
测试
GoZero微服务个人探究之路(二)Go-Zero官方api demo示例探究_第19张图片
与预期结果相符合

你可能感兴趣的:(微服务,golang,mysql)