概述
goa 框架 demo。创建了一个名为 call_me
的服务,支持使用 GET
请求,url
中有 uid
参数。请求和应答包体均为 json
格式。
代码生成
1 | cd ~/Documents/00Code/call_me/src |
日志封装
在 goa
框架内部使用 logrus
日志。其实在框架内封装了 logrus
的适配器,使用还是比较方便,但是 goa
的官方文档并没有做详细介绍。
logrus
设置方法:
- 创建
logrus
的logger
- 使用
gologrus.New
函数创建goa.LogAdapter
对象 - 使用
service.WithLogger(goalogrus.New(logger))
将goa.LogAdapter
设置到service
对象
logrus
使用:
- 使用
goalogrus.Entry(ctx)
将ctx
中logrus.Entry
取出 - 使用
logru.Entry
对象进行日志打印
middleware
在 goa
中可以使用 middleware
添加(HTTP)请求处理阶段。使用 comm_middleware.NewEntryMiddleware
创建新的 middleware
,将其注册进 goa .Service
内。middleware
创建方法:
1 | func NewEntryMiddleware() goa.Middleware { |
其中必须有 err := h(ctx, rw, req)
,保证请求正常进行。
使用示例:
1 | package main |
测试命令
接口测试命令:
1 | curl -i -X GET \ |
call_me.json
中上报内容:
1 | {"name":"zhoucj","age":18,"gender":"male","phone_no":"13288882638"} |
细节
在使用 goa
进行设计时发现在一个微服务项目中只能有一个 API
、Resource
函数。还有另外一个问题,如果已经存在了 Controller
文件之后不会再生成 Controller
文件。取巧的解决方法,将生成的 Controller
文件保存到另外一个文件中,删除生成的 Controller
;当更新了设计接口时可以直接重新运行 goagen
命令。