kitex的安装和使用

928 阅读2分钟

安装

正常在系统中下载好 go 的环境之后,我们还需要配置环境;

打开需要添加修改的文件:

sudo vim ~/.profile

在文件的最后面添加:

#添加Gopath路径
export GOROOT="/usr/local/go" //go的安装目录
export GOPATH="/data/go" //自己选择的工作区
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH 

之后在命令行输入:

source ~/.profile

让修改立即生效。

这样就完成了 go 的基本环境配置。

下载 kitex 之前,还需要将代理修改,否则将下载失败。 打开命令行:

go env -w GOPROXY=https://goproxy.cn,direct

输入这个之后,在输入命令:go env 来查看配置:

image.png

当看到 GOPATHGOROOT 是你选择的路径,GOPROXY 是上图的样子,就代表准备工作做好了。

接下来在命令行中输入来安装 kitex

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

image.png 像这样表示下载成功。

然后下载 thriftgo

go install github.com/cloudwego/thriftgo@latest

image.png

然后使用命令来查看下载的版本:

kitex --version
thriftgo --version

image.png

使用

ok,那么接下来就试试看 kitex。

在 GOPATH 根目录下创建一个文件夹:test_k

比如我的项目路径为:~/文档/go_work/golearn/test_k

然后使用命令:go mod init text_k 在项目文件夹中创建一个 go.mod 文件。

然后我们新建一个文件:kt.thrift,输入下列代码:

namespace go api

struct Request {
    1: string message1
    2: string message2
}

struct Response {
    1: string message
}

service KStudy {
    Response Concat(1: Request req)
}

表示定义了一个 kt 服务,包含了一个 Concat 接口,意思是将 Request 中的 message1 和 message2 两个字符串拼接起来,然后通过 Response 返回。

我们就可以使用 kitex 的代码生成功能来生成代码。

在项目目录下输入:

kitex -moudle test_k -service kstudy kstudy.thrift

test_k 为你的项目名称。

image.png

在代码创建完成后为如下格式:

image.png

此时我们需要使用 go mod tidy 命令来获取依赖包: image.png

现在可以在 handler.go 中来实现 Concat 的具体逻辑了:

// Concat implements the KStudyImpl interface.
func (s *KStudyImpl) Concat(ctx context.Context, req *api.Request) (resp *api.Response, err error) {
	// TODO: Your code here...
	resp = api.NewResponse()
	resp.Message = req.GetMessage1() + req.GetMessage2()
	return
}

接下来就是实现客户端的相关逻辑。

在项目目录下新建 client 文件夹。新增 main.go 作为客户端的启动入口。

image.png

代码为:

package main

import (
	"context"
	"log"

	"github.com/ag9920/kstudy/kitex_gen/api"
	"github.com/ag9920/kstudy/kitex_gen/api/kstudy"
	"github.com/cloudwego/kitex/client"
)

func main() {
	client, err := kstudy.NewClient("kstudy", client.WithHostPorts("0.0.0.0:8888"))
	if err != nil {
		log.Fatal(err)
	}
	req := &api.Request{
		Message1: "message1",
		Message2: "message2",
	}
	resp, err := client.Concat(context.Background(), req)
	if err != nil {
		log.Fatal(err)
	}
	log.Println(resp)
}

最后在项目目录下,输入 go run . 运行 server,端口号默认为 8888: image.png

client 目录下运行 main.goimage.png 这样就代表成功了。


参考自: