亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為 Go 生成多個 Thrift 文件的正確方法

為 Go 生成多個 Thrift 文件的正確方法

Go
斯蒂芬大帝 2021-09-10 17:09:43
所以我有以下文件/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 就這樣。也許有一天我會發送一個行為更符合其他語言的合并請求。


查看完整回答
反對 回復 2021-09-10
  • 2 回答
  • 0 關注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號