所以我有以下文件
/src/baseService.thrift
/baseTypes.thrift
/baseSecurity.thrift
我希望将所有这些节俭定义创建到一个库中。因此,每个文件的顶部是:
baseService.thrift
==================
namespace java foo.bar
namespace cpp foo.bar
namespace js foo.bar
namespace go foo.bar
import "baseTypes.thrift"
baseTypes.thrift
================
namespace java foo.bar
namespace cpp foo.bar
namespace js foo.bar
namespace go foo.bar
baseSecurity.thrift
===================
namespace java foo.bar
namespace cpp foo.bar
namespace js foo.bar
namespace go foo.bar
import "baseTypes.thrift"
问题是,如何将所有这些创建到一个 lib 包中?它适用于 java/cpp/js,但是当我尝试为 go 构建时,它就不行了。
有了节俭,你不能做一个thrift gen:baz *.thrift,你必须一次做一个文件。对于其他语言,我们只做一个:
for f in `find *.thrift`; do
thrift -o myGenDir --gen go $f"
done
(为每个语言替换适当的 gen 命令)
对于 Python,这很好,因为它根据文件名 [即 foo/bar/{filename}/ttypes.py] 将每个 gen'd 文件放在它自己的目录中。对于 Java,它转储 foo/bar/ 中的所有文件,但每个类名都是唯一的。对于 cpp,它会将其全部转储到 gen 目录中,但每个 thrift 文件都是唯一命名的 [so {filename.h}, {filename.cpp}]。然而,对于 Go,它会将所有内容转储到 foo/bar 中,如下所示:
/foo/bar/constants.go
/foo/bar/service.go
/foo/bar/service-remote/
/foo/bar/baz/ [for anything that has a namespace of foo.bar.baz]
/foo/bar/ttypes.go
问题是,ttypes.go 和(大概)constants.go 正在被 for 循环中最后一个 gen'd 覆盖。有没有解决的办法?它适用于其他语言 - 似乎是对 Go 的疏忽。我错过了什么。我们有很多 Thrift 文件,里面有很多东西——我宁愿不必将同一包级别的所有东西都合并到一个 Thrift 文件中。
拉莫斯之舞
相关分类