golang入门笔记——kitex

news/2023/6/9 18:30:56

WSL的安装

由于Kitex并不支持Linux,所以需要首先安装WSL2

WSL一句话来说就是微软出的一个虚拟机工具

Win11下安装WSL2的步骤为:

1.“开始菜单”搜索功能,打开“启动或关闭Window功能”
image.png
2.勾选以下功能
1.适用于Linux的Window子系统
2.虚拟机平台
image.png

3.微软商店搜索wsl,点击安装
image.png
4.安装完打开,安装完之后输入用户的账号密码
image.png
如果安装过程中出现下面这种情况:
image.png
说明内核没有更新,需要更新
打开一个终端输入以下命令:
wsl --update
5.安装完成之后输入下列命令查看wsl的状态:
wsl -l -v
启动wsl命令:
wsl
6.安装完成之后我的电脑左下角会出现一个linux盘,为linux子系统的文件系统

image.png

Kitex

Kitex的准备工作

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

安装thriftgo
go install github.com/cloudwego/thriftgo@latest

安装成功后,使用以下命令验证是否安装成功
kitex --version
thriftgo --version

创建IDL文件

Kitex最典型的情况是使用thrift定义的IDL来编写服务接口,实现客户端和服务端的通信

hello.thrift文件内容如下:

namespace go apistruct Request {1: string message
}struct Response {1: string message
}service Hello {Response echo(1: Request req)
}

1.namespace go api这里指我们定义了一个命名空间:api,api代表生成的代码中有一个目录:api。
2.struct Request{},表示我们编写一个请求消息体。struct中变量的格式为:不重复的编号:类型:命名
3.struct Response{},表示我们编写了一个返回消息体。
4.service Hello{}表示定义了一个Hello服务
5.Response echo(1:Request req)表示服务Hello中有一个叫做echo的方法,方法的返回消息为Response,请求消息为Request,请求消息的格式为:编号: 请求消息:命名

生成代码

使用以下命令生成代码:
kitex -module "mod_name" -service a.b.c hello.thrift

-module mod_name
指定生成的代码所属的go模块,会影响生成代码里的import path
GOPATH/src 下的一个目录,那么可以不指定该参数;kitex 会使用GOPATH/src 开始的相对路径作为 import path 前缀。
如果当前目录不在 $GOPATH/src 下,那么必须指定该参数。
如果指定了 -module 参数,那么 kitex 会从当前目录开始往上层搜索 go.mod 文件

-service service_name
kitex 会生成构建一个服务的脚手架代码,参数 service_name 给出启动时服务自身的名字,通常其值取决于使用 Kitex 框架时搭配的服务注册和服务发现功能。

运行命令后生成的代码目录

image.png

然后执行命令
go mod tidy下载依赖

一个问题以及解决

代码生成后的hello/hello.go报错,这是因为
github.com/apache/thrift 这个包使用的是v0.17.0版本的,但v0.14.0之后的包中很多函数增加了context上下文参数,所以很多函数由于缺少参数报错。
只需要修改go.mod中的require中github.com/apache/thrift v0.17.0
github.com/apache/thrift v0.13.0然后再执行go mod tidy问题就能解决

客户端的调用

import "example/kitex_gen/api/echo"
import "github.com/cloudwego/kitex/client"
import "example/kitex_gen/api"...
c, err := echo.NewClient("example", client.WithHostPorts("0.0.0.0:8888"))
if err != nil {log.Fatal(err)
}
req := &api.Request{Message: "my request"}
resp, err := c.Echo(context.Background(), req, callopt.WithRPCTimeout(3*time.Second))
if err != nil {log.Fatal(err)
}
log.Println(resp)

其中,echo.NewClient(“example”, client.WithHostPorts(“0.0.0.0:8888”))是创建一个客户端连接,第一个参数是服务名,要与生成代码中的service_name保持一致,第二个参数是指定server的地址和端口号(server默认占用8888端口),

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4561011.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

nvcc 编译并行程序时报错gcc: error trying to exec ‘cc1plus‘: execvp: 没有那个文件或目录

一、nvcc 编译程序时报错 gcc: error trying to exec cc1plus: execvp: 没有那个文件或目录 cc1plus 是gcc编译工具链中用到的一个程序 报错非常直白,就是说gcc在执行时找不到这个程序 二、问题解决方法 1.确定是否正确安装gcc、g 如果系统中没有正确安装gcc…

VR眼镜转接线Type-c To DP加快充(乐得瑞LDr6282)

近几年,人们对电子数码设备的需求也不断提升,VR眼镜作为终端显示产品也不断更新迭代。目前VR眼镜开始配备USB -C接口,现在苹果、华为、三星、华硕、小米等品牌的笔记本都支持通过USB C接口来进行音视频数据传输。 USB-C接口除了能够用来传输文…

VR眼镜全国产化电子元件推荐方案

方案概述: VR眼镜利用头戴式显示设备将人的对外界的视觉、听觉封闭 , 引导用户产生一种身在虚拟环境中的感觉 。其显示原理是左右眼屏 幕分别显示左右眼的图像, 人眼获取这种带有差异的信息后在脑海中产生立体感 。 一般来说, VR…

VR/AR眼镜Type-C转接器边投屏边PD快充方案

前几年VR技术可谓是火热一时,看似现在比较平静,不过随着元宇宙概念的传播,VR热度也涨了上来。大家可能只知道VR,对AR,MR不太了解,接下来笔者先介绍一下区别。 VR全称Virtual Reality(虚拟现实)&…

VR眼镜的触摸板移动控制

VR眼镜的触摸板移动控制 1.直接将脚本挂在需要移动的物体上 using UnityEngine; using System.Collections; using VRStandardAssets.Utils; public class TouchPadMoveCtr : MonoBehaviour { public VRInput _vrInput;void OnEnable() {_vrInput.OnSwipe OnSwipe; }void …

【2018最新VR眼镜排行榜】VR眼镜有哪些品牌?哪个VR眼镜性价比高,比较好?求推荐

科技的发展,高科技产品层出不穷,VR眼镜的出现使人们足不出户也能享受到高品质的观影感受。VR(Virtual Reality)即虚拟现实,简称VR.虚拟现实头戴显示器设备,简称VR头显VR眼镜.现在,VR眼镜已不是什么稀奇的东…

VR眼镜探究

最近看到网上暴风魔镜2卖的很火,先是股票连着涨停,然后是获得1000W美元的融资。于是脑子一抽筋,花了99大洋买了个暴风魔镜体验了一把。   总体感觉,暴风魔镜2就像网上说的那样,还是很有诚意的。有一个镜架&#xff…

Oculus VR眼镜调研

VR眼镜 oculus 软件安装 最详细的Oculus Rift VR/3D眼镜安装设置教程(多图)在线安装Oculus rift驱动【非VPN方法】 Rift,Go,Gear VR,Quest: Oculus Rift 可玩游戏可看电影 需要连接电脑 头部跟踪6自由度(旋转、平移) 需挂VPN 分老…