golang是否提供了输出人类可读protobuf的简便方法

时间:2016-02-19 21:33:05

标签: go protocol-buffers

有一种很好的方法可以在golang中获得protobuf对象的人类可读字符串表示吗?相当于https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.message#Message.DebugString的东西?

我正在使用https://github.com/golang/protobuf

3 个答案:

答案 0 :(得分:7)

我相信你正在寻找proto.MarshalTextString

p := &example.Test{
  Label: proto.String("this"),
  Reps:  []int64{4, 3, 2, 1},
  InnerTest: &example.Test_InnerTest{
    InnerLabel: proto.String("is the end"),
  },
}

fmt.Println(proto.MarshalTextString(p))

您可以在Go包test中看到一个示例。

答案 1 :(得分:2)

您可以使用TextMarshaler。稍加修改的示例proto:

p := &example.Test{
    Label: proto.String("this"),
    Reps:  []int64{4, 3, 2, 1},
    InnerTest: &example.Test_InnerTest{
        InnerLabel: proto.String("is the end"),
    },
}

t := proto.TextMarshaler{}
t.Marshal(os.Stdout, p)

输出:

label: "this"
reps: 4
reps: 3
reps: 2
reps: 1
inner_test: <
  inner_label: "is the end"
>

答案 2 :(得分:1)

如果您需要将 PB 编组为结构化消息(以 JSON 格式)以备将来使用,您可以使用 MarshalToString

一个简单的例子:

marshaler := &jsonpb.Marshaler{}
reqString, err := marshaler.MarshalToString(req)
log.Println("@@REQ@@", reqString)

或者参考official unit test也可以。