首页 > 解决方案 > 如何在协议缓冲区中有自定义字符串方法?

问题描述

假设我有一个原型文件,例如:

message Sample {
  Test t = 1;
}

message Test {
  string s = 1;
}

我想在 type 上有自己的自定义String方法Test,但是由于自动生成的代码protoc已经包含String方法,因此我的自定义String方法会导致编译器错误。

值得一提的是自动生成的String方法是:

func (x *Test) String() string {
    return protoimpl.X.MessageStringOf(x)
}

上面的代码,只是打印值本身,但我想知道是否有任何方法可以使用我的自定义String实现?

标签: goprotocol-buffers

解决方案


我认为您不应该弄乱生成pb的文件而使用包装器结构。

击中我的第二个选择是,也许您可​​以为 protoc 编写一个插件,并在给出需要的 struct 标记时使其使用这些方法。

type Wrapper struct{
   pb.Sample
}

func (w Wrapper) String() string{
  ...
}

我想到的第二个选项是,也许您可​​以为 protoc 编写一个插件,并在需要的 struct 标签给出时使用这些方法。


推荐阅读