前言
Kitex是字节跳动内部的Golang微服务RPC框架,先已开源。
Kitex文档:https://www.cloudwego.io/zh/docs/kitex/getting-started/
Kitex体验:https://juejin.cn/post/7098966260502921230
Kitex源码阅读—脚手架代码的生成(一):https://juejin.cn/post/7100867939829563422
IDLThriftProtobuf
main.goinit()flagflagmain.go
提醒:Kitex源码阅读系列的文章连贯性很大,建议按顺序阅读。并且随着源码的阅读,我会从零开始,不断扩展我们自己基于Kitex编写的kitexx框架的功能(目前kitexx已经拥有了解析命令行参数的功能) 。
源码分析
分析main.go的main()函数
通过观察注释,main函数分为两个部分,下面分析。
以插件模式运行
switchRun()protocthriftgo
只有在不满足这两个case的情况下,main函数继续执行,运行kitex自己的脚手架代码生成逻辑。这里我们先着重于分析kitex自己逻辑,越过这个部分。
以kitex模式运行
分析args.parseArgs()函数
- 用于解析命令行参数,并且对属于的命令行参数进行有效性检查,可以说整个args.parseArgs()都在完成各种检查。
a.buildFlags()FlagSetflag库flagvaluevalueflagflagvalue
args.parseArgs()a.checkPath
checkPath()Kitex文档-module(go path / go mod)kitex工具
分析buildCmd()函数
cmd := buildCmd(&args, out)
buildCmd()lookupTool()
buildCmd()
thriftgothriftthriftgoapache/thrift
thriftgo地址:https://github.com/cloudwego/thriftgo
protocprotobuf
cmd.Run()
小结
这里整体梳理一下通过命令行生成IDL定制的脚手架的过程:
FlagSetflagflagFlagSetCmdthriftgoprotoccmd.Run()kitex_gen
当然在我们分析main函数源码的时候,没有分析kitex命令行工具作为插件的工作流程,这里希望你触类旁通,尝试自己去分析一下。
为kitexx增加脚手架代码生成功能
编写kitexx框架
thriftgokitexxkitexxg参数thriftgogothriftgo
thriftgo-g参数thriftgo
编写IDL
go build -o ~/go/bin/kitexx$GOPATH/binecho.thriftthrift
测试kitexx功能
kitexx -g go
gen-gokitexx-g
总结
kitexkitexx微框架