官方文档

点击前往

启动服务

1
2
// API 或 rpc 代码运行
cd project/service/user/cmd/api && go run user.go -f etc/user.yaml

rpc调用链建议

在设计系统时,尽量做到服务之间调用链是单向的,而非循环调用,例如:order服务调用了user服务,而user服务反过来也会调用order的服务, 当其中一个服务启动故障,就会相互影响,进入死循环,你order认为是user服务故障导致的,而user认为是order服务导致的,如果有大量服务存在相互调用链, 则需要考虑服务拆分是否合理。

go-zero 为何使用 etcd: 用于服务注册,检测 rpc server 是否存在

语法示例

API .api 语法示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
info(
    author: "xxx"
    date:   "xxx"
    desc:   "api语法示例及语法说明"
)

@server(
    jwt: Auth
    group: votes // 定义文件夹分组
    middleware: Usercheck
)
service votes-api {
    @doc(
        summary: "投票"
    )
    @handler vote
    post /votes/vote (VoteReq) returns (VoteResp)

    @doc(
        summary: "获取投票列表"
    )
    @handler list
    get /votes/list (ListReq) returns (ListResp)
}

RPC .proto 语法示例

在 .proto 文件内,写好相关方法定义文件后,按下快捷键 command+n,即可生成 rpc 相关代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
syntax = "proto3";

package user;

service user {
  rpc getUser(IdReq) returns (UserInfoReply);
}

message IdReq {
  int64 user_id = 1;
}

message UserInfoReply {
  int64 user_id = 1;
  string name = 2;
  string number = 3;
  string gender = 4;
}

goctl

goctl是go-zero微服务框架下的代码生成工具(当然也可以用 GoLand 插件代替,这样就不用记那么多命令)。使用 goctl 可显著提升开发效率,让开发人员将时间重点放在业务开发上,其功能有:

  • api服务生成
  • rpc服务生成
  • model代码生成
  • 模板管理

goctl 读音

很多人会把 goctl 读作 go-C-T-L,这种是错误的念法,应参照 go control 读做 ɡō kənˈtrōl。