所以我有以下文件
/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很好,但当我尝试构建for go时,这是不可以的。
有了节俭,你不能做一个thrift gen:baz *.thrift,你必须一次只做一个文件。对于其他语言,我们只做一个:
for f in `find *.thrift`; do
thrift -o myGenDir --gen go $f"
done(为每个lang替换适当的gen命令)
对于Python来说,这很好,因为它根据文件名(即foo/bar/{ filename }/ttypes.py )将每一个gen文件放在自己的dir中。对于Java,它转储foo/bar/中的所有文件,但是每个类名都是唯一的。对于cpp,它将其全部转储到gen dir中,但在每个节省文件中唯一命名为{filename.h},{filename.cpp}。但是,它将所有内容都放入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覆盖。有办法绕道吗?它适用于其他语言--似乎是对Go的疏忽。我错过了什么。我们已经有了很多包含大量内容的Thrift文件--我不希望将处于同一包级别的所有内容合并到一个节约文件中。
发布于 2015-01-05 21:24:27
问题是,ttypes.go和(想必) constants.go正在被for循环中的任何gen覆盖。
是的,那是真的。
有办法绕道吗?
最(跨语言)可移植的建议是不要这样做。相反:
thrift --help编译器为Go提供了一些编译器开关,这些开关至少可以部分地帮助您(通过在命令提示符上键入获得所有语言的所有可用选项)
go (Go):
package_prefix= Package prefix for generated files.
thrift_import= Override thrift package import path (default:git.apache.org/thrift.git/lib/go/thrift)
package= Package name (default: inferred from thrift file name)这些选项的使用方式类似于
thrift -gen go:package=mypack,package_prefix=myprefix它适用于其他语言--似乎是对Go的疏忽。
这可能是你的印象,但我建议不要尝试,如果你对跨语言兼容性感兴趣的话。其他语言的行为也是一样的。举个例子:我最近修复了一个问题with the Erlang tests (或者更好地解决了这个问题),在这个问题上,我不得不和这个问题做斗争。
发布于 2016-03-02 01:57:10
最近也有同样的问题。不同名称空间中的每个IDL都不能工作。代码看起来很糟糕,到处都有不同的名称空间需要记住,为每件小事添加/删除名称空间都很烦人。
我只定义了一个名称空间,所以我附带了以下内容。基本上,对象在不同的文件中,但它们是在单个文件中编写的。所以没有导入,没有跨文件引用,也没有每个文件中的命名空间。我把名称空间放在一个单独的文件中。然后,我的脚本将所有内容连接到一个大的第三英尺文件中,并编译它。它确实要求您将所有事情按正确的顺序排列,但它适用于我需要的语言- Go、C#和Java工作得很好。
对我来说也是个疏忽。没有理由就这么走了。也许有一天,我会发送一个合并请求的行为,更好地匹配其他语言。
https://stackoverflow.com/questions/27787009
复制相似问题