Как получить значение произвольного поля в пб. go - PullRequest
0 голосов
/ 28 апреля 2020

Существует определенный файл .proto. синтаксис: proto3.

syntax = "proto3";
package proto;

import "google/protobuf/descriptor.proto";

extend google.protobuf.ServiceOptions {
  string api_prefix = 50001;
}

extend google.protobuf.MethodOptions {
  string api_url = 50002;
  string api_method = 50003;
}

option go_package = "proto;proto";

service Foo {
  option (api_prefix) = "/math";

  rpc Add(MathRequest) returns (MathResponse) {
    option (api_url) = "/:number1/:number2";
    option (api_method) = "PUT";
  }
}

message MathRequest {
  string number1 = 1;
  string number2 = 2;
}

message MathResponse {
  string number = 1;
}

И есть файл .pb. go, сгенерированный protoc --go_out=. *.proto

Как получить значение параметра api_url в службах и api_url значение параметра в методе RP C?

1 Ответ

0 голосов
/ 29 апреля 2020

Я сам нашел решение.

    var fd protoreflect.FileDescriptor
    fd = pb.File_math_proto
    s := fd.Services().Get(0)
    m := s.Methods().Get(0).Options()
    n := proto.GetExtension(m, pb.E_Http)
    e := n.(*pb.HttpRule)
...