生成引用结构体
使用 Kitex 命令行生成结构体引用,解决公共结构体问题
使用场景
对于同一份 IDL 生成的 kitex_gen 结构体,如果分别放到不同的仓库后,会出现类型不一致的情况。 有的业务团队会对公共的 IDL 有独立的结构体仓库来存放这些生成产物。kitex 命令行可以在生成代码阶段直接对特定的 IDL 不进行实际的结构体生成,而是向远端做引用,从而解决类型不一致的情况。
使用方式
首先确保:
- kitex 命令行版本不低于 v0.4.4
- thriftgo 版本不低于 v0.3.0
创建一个名为 idl-ref.yml 的文件,对特定的 IDL 配置你想使用的远端引用:
ref:
idl/base.thrift: "github.com/xxxx/public_repo/base"
idl/public/item.thrift: "github.com/xxxx/public_repo/item"
在有 idl-ref.yml 的目录下正常执行 kitex 命令并传递额外参数 -thrift code_ref
后,这部分指定的 IDL 在执行后不会生成完整的序列化反序列化代码,而是对结构体生成一个远端引用,从而解决公共库结构体冲突问题。
完整的示例命令:
kitex -module example -service example-server -thrift code_ref idl/base.thrift
生成产物的一个例子如下:
// Code generated by thriftgo (0.2.4). DO NOT EDIT.
package base
import (
base "github.com/xxxx/public_repo/base"
)
type Base = base.Base
var NewBase = base.NewBase
type BaseResp = base.BaseResp
var NewBaseResp = base.NewBaseResp
const MY_CONST = base.MY_CONST
var MAP_CONST = base.MAP_CONST
最后修改
March 1, 2024
: Update tutorial.md ,fixed an inconsistency (#986) (89c92e3)