所以我有以下文件/src/baseService.thrift /baseTypes.thrift /baseSecurity.thrift我希望將所有這些節儉定義創建到一個庫中。因此,每個文件的頂部是:baseService.thrift==================namespace java foo.barnamespace cpp foo.barnamespace js foo.barnamespace go foo.barimport "baseTypes.thrift"baseTypes.thrift================namespace java foo.barnamespace cpp foo.barnamespace js foo.barnamespace go foo.barbaseSecurity.thrift===================namespace java foo.barnamespace cpp foo.barnamespace js foo.barnamespace go foo.barimport "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 文件中。
2 回答

拉莫斯之舞
TA貢獻1820條經驗 獲得超10個贊
最近有同樣的問題。不同命名空間中的每個 IDL 都不起作用。代碼看起來很糟糕,你必須記住到處都有不同的命名空間,為每一件小事添加/刪除命名空間很煩人。
我只定義了一個命名空間,所以我來了?;旧希瑢ο笪挥诓煌奈募?,但它們是在單個文件中寫入的。所以沒有導入,沒有跨文件引用,每個文件中沒有命名空間。我將命名空間放在一個單獨的文件中。然后我的腳本將所有內容合并到一個大的 thirft 文件中并進行編譯。它確實要求您按正確的順序排列所有內容,但它適用于我需要的語言 - Go、C# 和 Java 工作正常。
對我來說,這看起來也是一種疏忽。沒有理由僅僅為了 Go 就這樣。也許有一天我會發送一個行為更符合其他語言的合并請求。
- 2 回答
- 0 關注
- 203 瀏覽
添加回答
舉報
0/150
提交
取消