Создать указатель массива в protobuf, используя go lang - PullRequest
0 голосов
/ 09 октября 2018

Я новичок в grpc, я создал файл прото со службой под названием Accounts, у меня есть имя метода GetValidators, я хочу создать указатель silce [] * на переменные BondedValidators и UnbondingValidators внутри используемого сообщения (gogoproto.customtype).

syntax = 'proto3';
package grpc;

import "github.com/gogo/protobuf/gogoproto/gogo.proto";
import "google/api/annotations.proto";
import "google/protobuf/struct.proto";

option (gogoproto.marshaler_all) = false;
option (gogoproto.unmarshaler_all) = false;
option (gogoproto.sizer_all) = false;
option (gogoproto.goproto_registration) = true;
option (gogoproto.messagename_all) = true;
option (gogoproto.protosizer_all) =false;

service Accounts {
rpc GetValidators(Empty) returns (ValidatorOutput);
}

message ValidatorOutput {
uint64 BlockHeight  = 1 ;       
repeated google.protobuf.ListValue  BondedValidators  = 2   [(gogoproto.customtype) = "github.com/gallactic/gallactic/core/validator.Validator", (gogoproto.nullable) = false];
repeated google.protobuf.ListValue  UnbondingValidators  = 3 [(gogoproto.customtype) = "github.com/gallactic/gallactic/core/validator.Validator", (gogoproto.nullable) = false];
}

всякий раз, когда используется приведенный ниже код:

protoc -I/usr/local/include -I. -I$GOPATH/src-I$GOPATH/src/github.com/grpcecosystem/grpc-gateway/third_party/googleapis --gofast_out=plugins=grpc:./ ./protobuf/account.proto

Его генерируемый вывод в файле .pb.go с тремя дополнительными переменными

type ValidatorOutput struct {
BlockHeight          uint64                        `protobuf:"varint,1,opt,name=BlockHeight,proto3" json:"BlockHeight,omitempty"`
BondedValidators     []github_com_gallactic_gallactic_core_validator.Validator `protobuf:"bytes,2,rep,name=BondedValidators,customtype=github.com/gallactic/gallactic/core/validator.Validator" json:"BondedValidators"`
UnbondingValidators  []github_com_gallactic_gallactic_core_validator.Validator `protobuf:"bytes,3,rep,name=UnbondingValidators,customtype=github.com/gallactic/gallactic/core/validator.Validator" json:"UnbondingValidators"`
XXX_NoUnkeyedLiteral struct{}                                                   `json:"-"`
XXX_unrecognized     []byte                                                     `json:"-"`
XXX_sizecache        int32                                                      `json:"-"`
 }

должен быть

type ValidatorOutput struct {
BlockHeight          uint64                                                     `protobuf:"varint,1,opt,name=BlockHeight,proto3" json:"BlockHeight,omitempty"`
BondedValidators     []*github_com_gallactic_gallactic_core_validator.Validator `protobuf:"bytes,2,rep,name=BondedValidators,customtype=github.com/gallactic/gallactic/core/validator.Validator" json:"BondedValidators"`
UnbondingValidators  []*github_com_gallactic_gallactic_core_validator.Validator `protobuf:"bytes,3,rep,name=UnbondingValidators,customtype=github.com/gallactic/gallactic/core/validator.Validator" json:"UnbondingValidators"`
}  

1 Ответ

0 голосов
/ 09 октября 2018

gogo proto удалит указатели, когда вы используете опцию nullable=false, поэтому вам нужно удалить опции (gogoproto.nullable) = false из определения прото, чтобы он генерировал [] * foo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...