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

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

如何命名這些谷歌原型字段,以便我可以在GoLang中使用它們來接受特定的JSON?

如何命名這些谷歌原型字段,以便我可以在GoLang中使用它們來接受特定的JSON?

Go
絕地無雙 2022-09-19 10:47:20
我正在構建一個 gRPC 函數(稱為 myFunc),該函數將以下 JSON 數據的等效項作為其參數:{  "id": "ABCD4435010",  "otherId": "WXYZ4435010",  "duration": 30}作為本練習的一部分,我需要設計原型布夫消息。它看起來像這樣: 1:    // MyFunc does something I guess. 2:    rpc MyFunc(MyFuncRequest) returns (MyFuncResponse) { 3:        option (google.api.http) = { 4:            post: "/my.path.to.endpoint/MyFunc" 5:            body: "*" 6:        }; 7:    } 8: 9:    // MyFuncRequest is the request object for MyFunc.10:    message MyFuncRequest {11:        // id is something.12:        string id = 1;13:        // otherId is something.14:        string otherId = 2;15:        // duration is something.16:        string duration = 3;17:    }當我嘗試從中生成 golang 文件時,我收到以下錯誤:myFile.proto:14:3:Field name "otherId" must be lower_snake_case.myFile.proto:16:3:Field "duration" must be a google.protobuf.Duration.這些錯誤的 2 個問題:如果我更改為它將不再與 JSON 中的鍵名匹配。otherIdother_id如果我將字段的類型更改為它將不再與JSON中的數據類型匹配。因此,編組/取消編組將失敗。durationgoogle.protobuf.Duration如何解決這些錯誤消息并讓我的協議緩沖區編譯?
查看完整描述

3 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

  1. 為原型布夫擴展指定 JSON 名稱是你問題的答案嗎?

    message TestMessage {
        string other_id = 2 [json_name="otherId"];
    }
  2. google.protobuf.Duration應該是一個字符串。在這里閱讀評論


查看完整回答
反對 回復 2022-09-19
?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

我假設你正在得到,你想要.OtherIdotherId

創建一個新類型并將其映射到原始生成的類型|可能是最簡單的。這為您提供了所需的映射,而無需進行任何“雜技”來保持快樂并獲得所需的JSON。protoc

我很驚訝,它檢測到并強制。您希望這是一個數字而不是一個字符串。您是否嘗試過使用例如 在您的消息定義中,而不是(它不是)?durationuint32string


查看完整回答
反對 回復 2022-09-19
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

按照 grpc 快速入門指南 進入那里 網站() grpc.io/docs/languages/go/quickstartprotoc version 3


通過更新他們的例子,在這里說改變你好請求如下,并按照這個命令重新生成grp代碼。hello world


    message HelloRequest {

        // id is something.

        string id = 1;

        // otherId is something.

        string otherId = 2;

        // duration is something.

        string duration = 3;

    }

重新生成命令


    --go-grpc_out=. --go-grpc_opt=paths=source_relative \

    helloworld/helloworld.proto

它將使用您的字段創建 grpc 請求,而不會出現錯誤。


查看完整回答
反對 回復 2022-09-19
  • 3 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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