生成引用结构体

使用 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