CloudWeGo-Kitex教程三:增加新的方法

作者: adm 分类: go 发布时间: 2021-09-18 16:01

现在让我们为新方法分别定义一个新的请求和响应,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})

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!