golang入门笔记——kitex

news2024/9/21 16:19:51

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 api

struct 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.coloradmin.cn/o/172192.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qsort函数

目录1.什么是qsort函数2.实现一个qsort函数3.用qsort函数排序一个结构体4.模仿qsort的功能实现一个通用的冒泡排序1.什么是qsort函数 我们以前学习过的一些排序算法,如冒泡、希尔、快排等等,它们速度有快有满,但是这些排序都只能排序一种类型…

iOS 内存泄漏检测 Instruments Leaks

Xcode 中 按住 command I 或者菜单栏 Product – Profile 2. 双击 Leaks 或者按 choose,打开 Leaks 面板 3. 在显示的 Leaks 面板中,点击左上角红色点,即可运行内存检测。 4. 在运行过程中如果发现Leak Checks(如图)…

【C进阶】C进阶练习编程题

⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏留言 ⭐系列专栏:C语言进阶 ⭐代码仓库:C Advanced 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们…

关闭“此版本的Windows不再支持Microsoft Edge”提示

在Win7中,安装Microsoft Edge,升级到“109.0.1518.55 (正式版本)”后,打开Edge会弹出提示: 此版本的 Windows 不再支持 Microsoft Edge。升级到 Windows 10 或更高版本,以从 Microsoft Edge 获取常规功能和安全更新。 …

ESPNet: 自动驾驶领域轻量级分割模型

论文标题:ESPNet: Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation 论文地址:https://arxiv.org/pdf/1803.06815v2.pdf 开源地址: https://github.com/sacmehta/ESPNet 论文思想 ESPNet是用于语义分割的轻量…

一文弄懂Linux虚拟机网络配置

文章目录计算机网路基础网络连接模式Bridged(桥接模式)NAT(地址转换模式)Host-Only(仅主机模式)Linux常用网络相关命令ifconfig:配置网络接口ping:测试主机之间网络连通性修改ip地址…

Threejs 导入动态模型 - 兔子岛

Threejs 动画模型GLTF加载器(GLTFLoader) glTF(gl传输格式)是一种开放格式的规范 (open format specification), 用于更高效地传输、加载3D内容。该类文件以JSON(.gltf)…

产品心理学:福格行为模型详解与应用

​Fogg说人的行为由动机,能力和触发条件这三要素组成,这三个同时都满足时行为才会发生。用一个等式来简化就是: BMAT 其中B是Behavior行为,M是Motivation 动机,A是Ability能力,T是Triggers触发。 行为的发…

“华为杯”研究生数学建模竞赛2004年-【华为杯】B题:实用下料的数学模型(附优秀论文)

赛题描述 “下料问题(cutting stock problem)”是把相同形状的一些原材料分割加工成若干个不同规格大小的零件的问题,此类问题在工程技术和工业生产中有着重要和广泛的应用. 这里的“实用下料问题”则是在某企业的实际条件限制下的单一材料的下料问题。 一个好的下料方案首先…

JavaEE4-Spring使用

目录 1.存储Bean对象到Spring容器中 1.1.创建Bean 1.2.将Bean注册到Spring容器中 1.2.1.第一次存储Bean(可选,如果是第二次及以后,此步骤忽略) 1.2.2.添加Bean标签 2.从Spring容器中获取并使用Bean对象 2.1.创建Spring上下…

ADC架构_Flash

ADC架构_Flash 比较器做1位ADC Vin > Vref Vout High&#xff08;1&#xff09; Vin < Vref Vout Low&#xff08;0&#xff09; 比较器是组建集成ADC的内部基本而又关键的模块&#xff1b;在比较器应用在ADC中一般要求很高的分辨率&#xff0c;也就是很小的差分输…

Spring Security 认证研究

2 Spring Security 认证研究 2.1 Spring Security介绍 认证功能几乎是每个项目都要具备的功能&#xff0c;并且它与业务无关&#xff0c;市面上有很多认证框架&#xff0c;如&#xff1a;Apache Shiro、CAS、Spring Security等。由于本项目基于Spring Cloud技术构建&#xff…

java数组2023014

数组&#xff1a;首先数组也是一种类型 Java的数组要求所有的数组元素具有相同的数据类型。因此&#xff0c;在 一个数组中&#xff0c;数组元素的类型是唯一的&#xff0c;即一个数组里只能存储一种数据类型的数据&#xff0c;不能存储多种数据类型的数据。 注意&#xff1a; …

MySQL数据库约束(主键约束,外键约束详解)

关系型数据库的一个重要功能:需要保证数据的"完整性",可以通过人工的方式来观察确认数据的正确性,这种方式是可行的,但是不合适,因为人为控制的方式势必会存在疏忽,导致一些错误没有被检查出来,所以MySQL数据库定义了一些约束来帮助程序员更好的检查数据的正确系!一,…

git cherry-pick 教程

对于多分支的代码库&#xff0c;将代码从一个分支转移到另一个分支是常见需求。 这时分两种情况。一种情况是&#xff0c;你需要另一个分支的所有代码变动&#xff0c;那么就采用合并&#xff08;git merge&#xff09;。另一种情况是&#xff0c;你只需要部分代码变动&#x…

目标检测-yolov1的详细理解(代码和原理)

目标检测算法&#xff0c;主要分为两类&#xff1a; 一类是以R-CNN为代表的两阶段检测算法&#xff0c;将目标检测任务分为边界框回归和物体分类两个模块二是yolo系列算法&#xff0c;是将目标检测任务看作是回归任务。 原理 yolov1将图像划分为S*S的网格&#xff0c;如果检测…

计网必会:应用层结构体系

文章目录什么是应用层应用层原理P2P模式C/S模式进程的通信原理客户和服务器进程进程发生运输服务类型TCP服务UDP服务服务选择什么是应用层 应用层原理 P2P模式 两台主机相互通信互为服务器&#xff0c;互为主机&#xff0c;可以发现&#xff0c;这样的模式下&#xff0c;如果是…

【Java寒假打卡】JavaWeb-TomCat发布动态资源

【Java寒假打卡】JavaWeb-TomCat发布动态资源Servlet的介绍实现步骤Servlet的执行流程Servlet的介绍 Servlet是运行在Java服务器端的程序&#xff0c;用于接受和响应来自客户端基于HTTP协议的请求如果想实现Servlet的功能&#xff0c;可以通过实现javax.servlet.Servlet接口或…

三、QML开发之qml 语言基础

QML就是用来编辑和生成Quick界面的语言&#xff0c;所以在开发界面之前一定要了解基础的QML语言基础知识&#xff0c;接下来从介绍qml语法如何编写&#xff0c;变量和属性 对象的简要说明&#xff0c;通过本节的学习能够达到简单的加载图片 和设置lable标签存放位置&#xff0c…

【零基础】学python数据结构与算法笔记14-动态规划

文章目录前言88.动态规划介绍89.钢条切割问题90.钢条切割问题&#xff1a;自顶向下实现91.钢条切割问题&#xff1a;自底向上实现92.钢条切割问题&#xff1a;重构解93.最长公共子序列最长公共子序列&#xff1a;实现总结前言 学习python数据结构与算法&#xff0c;学习常用的…