当前位置: 首页 > 网络应用技术

Kitex源代码读取 - 如何通过命令行(1)生成脚手架代码

时间:2023-03-06 21:41:13 网络应用技术

  Kitex是Byte Beating内部的Golang Microservice RPC框架,该框架首先是开源。

  Kitex文档:https://www.cloudwego.io.io/zh/docs/kitex/getting-started/

  Kitex体验:https://juejin.cn/post/7098966260502921230

  在Kitex Experience的文章中,我们使用Kitex从零结构中构建自己的服务。只要我们定义它(界面描述语言),根据Kitex提供的命令行规则,我们可以生成支持,客户端和与服务器相关的脚手架代码,使我们能够直接编写服务器的响应实现以及客户端的请求以及客户的请求启动逻辑。

  那么Kitex如何生成脚手架代码?将围绕此源代码阅读本系列文章,并最终回答此问题。

  当初始安装或更新Kitex时,使用以下命令下载Kitex可执行文件(用于脚手架):

  这是一个可执行文件,因为完成了两件事(编译+安装),它们将目录中的依赖库编译到可执行文件中,然后在本地路径下下载。

  换句话说,您可以通过以下命令下载整个依赖关系库:

  然后输入目录以手动执行命令,根据目录名称(软件包名称)将其编译为可执行文件,然后将其移至目录以复制上述工作。

  例如,我构建了一个功能强大的工具!(您可以在终端中调用它,但尚未接受命令行参数,不用担心!通过对源代码的分析,我们将扩展Kitexx的功能!)

  首先返回Kitex,然后在命令行中输入以下命令,以实现项目脚手架代码的生成:

  它指的是可执行文件,后者是指定的命令行参数。

  让我们看一下脚手架代码生成的可执行文件之前,请看一下kitex的可执行文件:

  以下是查看初始化过程的过程。Args调用该方法,并将其传递。

  然后让我们看一下结构。通过第一行注释,我们知道该结构用于添加到代码生成中(每个标志都可以理解为Kitex工具命令行需要解析的参数,稍后将提及)。

  结构中有两个成员功能。第二个用于检查需要添加的标志的合法性。第一个用于将标志添加到GO标准命令行的标志中。

  看到这一点,您可以粗略地猜测分析命令行的工作最终落在GO标准库头上,但是Kitex在此基础上自定义了您需要的功能。

  本文介绍了命令行分析库标志的使用:https://sementfault.com/a/1190000021143456。

  然后,让我们看一下源代码(未在此处发布)。评论说明是标志的集合,并介绍了角色和触发条件。

  目前,我们已经渗透了源代码的第三层,而且我们并不急于加深,很容易失去方向。首先回到初中,我们已经知道该方法已被使用要添加到中间,我们该如何添加?

  让我们看一下该方法的源代码。该方法的作用是将值赋予值然后返回(您可以单击以查看源代码)。

  然后调用该方法,猜猜是将定义的标志添加到集合中以查看源代码。首先,要添加的标志的名称不能以-or =启动,然后确定是否有标志地图中的同名。

  普遍理解,初始化功能的作用是调用该方法,为代码生成添加一个附加标志。至于检查部分,在遇到指定错误时有必要终止程序。

  为了指定状态代码,0表示成功,1表示内部错误,2表示无效参数

  到目前为止,基本上已经分析了初始功能部分。你可能很好奇。由于它在初始化阶段添加了A且与标志性相关(实际上,尚未添加,因此在这里出售了第一名!以下说明),因此它本身就是本身。初始化?

  在这里,我们注意该功能上方的全局变量,并注意到它也称为自我呼唤,因此有必要查看源代码以查看是否可以找到初始化工作。

  我们的目标是找到一个类似于newflagset的函数,因此请输入args.go使用命令+f!肯定,只有一个地方!

  然后查看此buildflags函数的位置,没有办法,似乎您必须检查parseargs函数的调用。

  最终在您的主要功能中找到了它,但是问题出现了。分析文件初始化功能后,您将添加标志,并应在主功能正文之前执行。然后,此时,旗帜尚未初始化?这不是令人震惊的错误吗?实际上,这是我上面出售的段落

  让我们看一下方法和方法。实际上,初始化时,我们只是创建了它并添加了一个切片。要添加标志,有必要等到该方法初始化标志集。

  在阅读源代码时,上面的oolong实际上很可能会遇到,因为没有全面的观点,我们通常会有许多问题仅缺乏源代码的熟悉程度。只有通过重复审查,我们才能逐渐清楚地解决。

  实际上,go文件的初始函数仅初始化一个标志,这表明该标志的名称,值和用法不涉及。可以回答其余部分。但是考虑到长度的原因,我计划将其放在下一篇文章中。

  让我们丰富我们的Kitexx框架,以添加解析命令行的功能。(在此阶段,仅使用标准标准库的某些API,然后做出更多说明)。

  旗库还可以阅读本文:https://segentfault.com/a/1190000021143456

  手动将上述代码编译到目录中,然后尝试通过命令行运行,输入两个预添加的(Bool类型标志,不能添加到参数后面),然后使用我们输入的参数值来替换的默认值B和S具有B和S.Print的参数值。

  通过本文,我们最初分析了Kitex Framework脚手架工具的源代码的INIT功能。并体验您自己的命令行分析框架Kitexx的实现。

  在随后的文章中,主要功能的其余部分将继续扩展Kitexx框架的功能。

  原始:https://juejin.cn/post/7100867939829563422