单体服务

前言#

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

创建greet服务#

$ mkdir go-zero-demo
$ cd go-zero-demo
$ go mod init go-zero-demo
$ goctl api new greet
$ go mod tidy
Done.

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

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

$ tree greet
greet
├── etc
│   └── greet-api.yaml
├── greet.api
├── greet.go
└── internal
├── config
│   └── config.go
├── handler
│   ├── greethandler.go
│   └── routes.go
├── logic
│   └── greetlogic.go
├── svc
│   └── servicecontext.go
└── types
└── types.go

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

编写逻辑#

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

启动并访问服务#

  • 启动服务

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

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

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

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

    返回如下:

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

源码#

greet源码

最后更新 日期: