在Go中使用“oneof”构建protobuf消息

时间:2016-07-08 00:52:14

标签: go protocol-buffers

我最近开始使用GoLang和Protocol Buffers,我有以下消息我正在尝试使用

message KumoAPIMessage {
  oneof msg {
    OpenStackEnvironmentContext osEnvContext = 1;
  }
}

message OpenStackEnvironmentContext {
  string username = 1;
  string password = 2;
  string domain = 3;
  string project = 4;
  string authUrl = 6;
  string region = 7;
  string contextName = 8;
}

这些消息被分解,以便它们可以被封送并通过TCP发送到服务器代理(用Scala编写)。我遇到的问题实际上是在go应用程序中构建消息。

我收到了OpenStackEnvironmentContext条消息,但我无法弄清楚如何将其包裹在KumoAPIMessage中,我尝试了以下内容

apiMessage := kumo.KumoAPIMessage{ Msg: context, }

但是这只会在编译时抛出以下错误

cannot use context (type kumo.OpenStackEnvironmentContext) as type kumo.isKumoAPIMessage_Msg in field value:
kumo.OpenStackEnvironmentContext does not implement kumo.isKumoAPIMessage_Msg (missing kumo.isKumoAPIMessage_Msg method)

如果有人知道我哪里出错了,你就会成为我的英雄。

1 个答案:

答案 0 :(得分:2)

我曾经能够回答自己的问题。通过大量的谷歌搜索和实验,我得到了以下解决方案

<form action="page2.html">

<button type="button" class="accordion">Section 1</button>
<div class="panel">
    Ch.1: <input type=checkbox id="ch1" ><br>
    Ch.1: <input type=checkbox id="ch1"><br>
    Ch.1: <input type=checkbox id="ch1"><br>
</div>

<button type="button" class="accordion">Section 2</button>
<div class="panel">
    Ch.1: <input type="checkbox" id="ch1"><br>
    Ch.1: <input type="checkbox" id="ch1"><br>
    Ch.1: <input type="checkbox" id="ch1"><br>
</div>
</form>

似乎用于protobufs的GoLang编译器为包装器消息生成一个结构,并为它包装的消息类型生成一个结构