CloudWeGo-Kitex教程三:增加新的方法
现在让我们为新方法分别定义一个新的请求和响应,AddRequest
和 AddResponse
,并在 service Inzhong
中增加 add
方法:
namespace go api struct Request { 1: string message } struct Response { 1: string message } struct AddRequest { 1: i64 first 2: i64 second } struct AddResponse { 1: i64 sum } service Inzhong{ Response echo(1: Request req) AddResponse add(1: AddRequest req) }
完成之后 inzhong.thrift 的内容应该和上面一样。
重新生成代码
运行如下命令后,kitex 工具将根据 inzhong.thrift 更新代码文件。
kitex -service a.b.c inzhong.thrift
执行完上述命令后,kitex 工具将更新下述文件
更新 ./handler.go,在里面增加一个 Add 方法的基本实现
更新 ./kitex_gen,里面有框架运行所必须的代码文件
更新服务端处理逻辑
上述步骤完成后,./handler.go 中会自动补全一个 Add 方法的基本实现,类似如下代码:
// Add implements the InzhongImpl interface. func (s *InzhongImpl) Add(ctx context.Context, req *api.AddRequest) (resp *api.AddResponse, err error) { // TODO: Your code here... return }
让我们在里面增加我们所需要的逻辑,类似如下代码:
// Add implements the InzhongImpl interface. func (s *InzhongImpl) Add(ctx context.Context, req *api.AddRequest) (resp *api.AddResponse, err error) { // TODO: Your code here... resp = &api.AddResponse{Sum: req.First + req.Second} return }
增加客户端调用
服务端已经有了 Add 方法的处理,现在让我们在客户端增加对 Add 方法的调用。
在 ./client/main.go 中你会看到类似如下的 for 循环:
for { req := &api.Request{Message: "my request"} resp, err := client.Echo(context.Background(), req) if err != nil { log.Fatal(err) } log.Println(resp) time.Sleep(time.Second) }
现在让我们在里面增加 Add 方法的调用:
for { req := &api.Request{Message: "my request"} resp, err := client.Echo(context.Background(), req) if err != nil { log.Fatal(err) } log.Println(resp) time.Sleep(time.Second) addReq := &api.AddRequest{First: 512, Second: 512} addResp, err := client.Add(context.Background(), addReq) if err != nil { log.Fatal(err) } log.Println(addResp) time.Sleep(time.Second) }
重新运行示例代码
关闭之前运行的客户端和服务端之后
运行 server
go run .
运行 client
另起一个终端后,go run ./client
现在,你应该能看到客户端在调用 Add 方法了。
2021/09/18 01:01:15 Response({Message:my request}) 2021/09/18 01:01:16 AddResponse({Sum:1024})