プロトコルバッファーv3とGoを併用しようとしています。プロトコルバッファーv3でoneOfフィールドの構造体を使用する
example.proto
syntax = "proto3";
package test;
import "google/protobuf/timestamp.proto";
message Metadata {
uint64 userID = 2;
google.protobuf.Timestamp time= 3;
}
//SignOff when user logs out of Glory
message SignOff {
Metadata metadata =1;
}
//SignOn when user logs into Glory
message SignOn {
Metadata metadata =1;
}
message EventWrapper {
oneof event {
SignOff signOff = 1;
SignOn signOn = 2;
}
}
移動
now, _ := ptypes.TimestampProto(time.Now())
event := &pb_test.EventWrapper{
Event: &pb_test.EventWrapper_SignOn{
SignOn: &pb_test.SignOn{
Metadata: &pb_test.Metadata{
UserID: 1234,
Time: now,
},
},
},
}
protoBytes, err := proto.Marshal(event)
if err != nil {
log.Fatal(err)
}
log.Println(len(protoBytes) == 0)
jsonBytes, _ = json.MarshalIndent(event, "", "\t")
log.Println(string(jsonBytes))
にprotoc
と変換し、使用して出力がJSONが正しいしかしいるProtobuf符号化されたバイト配列が空であることを示しています。
{
"Event": {
"SignOn": {
"metadata": {
"userID": 1234,
"time": {
"seconds": 1491143507,
"nanos": 654053400
}
}
}
}
}
意図はgRPC経由ワイヤに沿って送信するために、これらの(repeated *EventWrapper
)の配列を持っているが、個々のものは現時点では動作しません。 protobuf Language Guideは、構造体が許可されていないことについて何も言わない。私は行方不明のものがありますか?