概述
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 命令。