单体服务

前言

由于go-zero集成了web/rpc于一体,社区有部分小伙伴会问我,go-zero的定位是否是一款微服务框架,答案是不止于此, go-zero虽然集众多功能于一身,但你可以将其中任何一个功能独立出来去单独使用,也可以开发单体服务, 不是说每个服务上来就一定要采用微服务的架构的设计,这点大家可以看看作者(kevin)的第四期开源说 ,其中对此有详细的讲解。

创建greet服务

  1. $ mkdir go-zero-demo
  2. $ cd go-zero-demo
  3. $ go mod init go-zero-demo
  4. $ goctl api new greet
  5. $ go mod tidy
  6. Done.

说明:如无 cd 改变目录的操作,所有操作均在 go-zero-demo 目录执行

查看一下greet服务的目录结构

  1. $ tree greet
  2. greet
  3. ├── etc
  4. └── greet-api.yaml
  5. ├── greet.api
  6. ├── greet.go
  7. └── internal
  8. ├── config
  9. └── config.go
  10. ├── handler
  11. ├── greethandler.go
  12. └── routes.go
  13. ├── logic
  14. └── greetlogic.go
  15. ├── svc
  16. └── servicecontext.go
  17. └── types
  18. └── types.go

由以上目录结构可以观察到,greet服务虽小,但”五脏俱全”。接下来我们就可以在greetlogic.go中编写业务代码了。

编写逻辑

  1. $ vim greet/internal/logic/greetlogic.go
  1. func (l *GreetLogic) Greet(req types.Request) (*types.Response, error) {
  2. return &types.Response{
  3. Message: "Hello go-zero",
  4. }, nil
  5. }

启动并访问服务

  • 启动服务

    1. $ cd greet
    2. $ go run greet.go -f etc/greet-api.yaml

    输出如下,服务启动并侦听在8888端口:

    1. Starting server at 0.0.0.0:8888...
  • 访问服务

    1. $ curl -i -X GET http://localhost:8888/from/you

    返回如下:

    1. HTTP/1.1 200 OK
    2. Content-Type: application/json
    3. Date: Sun, 07 Feb 2021 04:31:25 GMT
    4. Content-Length: 27
    5. {"message":"Hello go-zero"}

源码

greet源码

猜你想看