官方文档
点击前往
启动服务
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。