Go语言 如何在协议缓冲区中有自定义的字符串方法?

wlsrxk51  于 2022-12-07  发布在  Go
关注(0)|答案(2)|浏览(147)

假设我有一个原始文件,如下所示:

message Sample {
  Test t = 1;
}

message Test {
  string s = 1;
}

我想在Test类型上有我自己的自定义String方法,但是由于protoc的自动生成代码已经包括String方法,我的自定义String方法导致编译器错误。
值得一提的是自动生成String的方法是:

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

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

zhte4eai

zhte4eai1#

我不认为你应该用生成的pb文件来代替,而是使用 Package 结构。

type Wrapper struct{
   pb.Sample
}

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

我想到的第二个选择是,也许你可以为protoc编写一个插件,当需要struct标记时,让它使用这些方法。

nbnkbykc

nbnkbykc2#

您可以替换*.pb.go文件本身的实现。但是,如果原始proto文件在修改后的文件所在的相同路径下编译,则更改将消失。

相关问题