零基础之go语言14 | 青训营笔记

102 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天 本次笔记将一步一步的记录Kitex的使用

Kitex

Kitex不支持Windows系统!Kitex不支持Windows系统!Kitex不支持Windows系统!

安装centos虚拟机

我使用的是VMware workstations虚拟机平台,在该平台上使用linux系统的centos进行kitex的快速入门

image.png

image.png

虚拟机安装教程:www.bilibili.com/video/BV1WY…

从p8看到p12即可

然后在centos安装go的环境,安装idea等操作自行百度

安装代码生成工具

  • 首先,要确定你的gopath

image.png

  • 其次在gopath下安装kitex和thrift

    go install github.com/cloudwego/tool/cmd/kitex@latest ​ go install github.com/cloudwego/thriftgo@latest

image.png

  • 配置环境变量

      export PATH=$GOPATH/bin:$PATH
    

image.png 然后重启 然后重启 然后重启

重启后,输入 kitex --version thriftgo --version 查看是否安装成功

image.png

从git扒demo

在gopath下创建如下文件夹,在cloudwego中打开终端,从git获得项目 image.png

git clone https://github.com/cloudwego/kitex-examples.git

若没有git,可直接访问改url,通过浏览器下载代码

运行示例代码

若go.mod爆红,我的解决方案是在idea里面的go模块下设置

image.png

GOPROXY=https://goproxy.cn,direct
(cn可换成io)

在hello目录下打开两个终端,分别运行 go run . go run ./client,出现下图所示即成功

image.png

image.png

增加新方法

关闭上面两个终端 更改hello/hello.thriftgo中的代码

namespace go api

struct Request {
        1: string message
}

struct Response {
        1: string message
}

service Hello {
    Response echo(1: Request req)
}
//上面是原来的
//下面是更改后的
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 Hello {
    Response echo(1: Request req)
    AddResponse add(1: AddRequest req)
}

更改后在hello下打开终端并输入命令

kitex -module github.com/cloudwego/kitex-examples -service a.b.c hello.thrift

其中github.com/cloudwego/kitex-examples是go.mod的名称

image.png

在./handler.go查看是否有add方法存在用以验证以上命令是否起效

然后将add更改为如下代码

// Add implements the HelloImpl interface.
func (s *HelloImpl) 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
}

在 ./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)
        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)
}

最后重新运行一次:在hello目录下打开两个终端,分别运行 go run . go run ./client

会得到如下返回

image.png

image.png

多了一个我们添加的add客户端答复