英文:
How to have custom String method in Protocol Buffer?
问题
假设我有一个类似的proto文件:
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
实现呢?
英文:
Let's say I have a proto file like:
message Sample {
Test t = 1;
}
message Test {
string s = 1;
}
I want to have my own customize String
method on type Test
, but since the auto generated code of protoc
already includes String
method, my custom String
method leads to a compiler error.
It is worth mentioning the auto generated String
method is:
func (x *Test) String() string {
return protoimpl.X.MessageStringOf(x)
}
The above code, just prints the value itself but I was wondering if there is any way which I can use my custom String
implementation?
答案1
得分: 4
我认为你不应该操纵生成的 pb
文件,而是应该使用一个包装结构体。
type Wrapper struct{
pb.Sample
}
func (w Wrapper) String() string{
...
}
我脑海中浮现的第二个选择是,你可以为 protoc 编写一个插件,并在给定需要使用这些方法的结构体标签时使用它们。
英文:
I don't think you should mess around with generated pb
files and use a wrapper struct instead.
type Wrapper struct{
pb.Sample
}
func (w Wrapper) String() string{
...
}
Second option that comes to my mind is that maybe you can write a plugin for protoc and make it use those methods when needed struct tag is given.
答案2
得分: -2
你可以直接替换*.pb.go
文件中的实现部分。
然而,如果原始的proto文件在与修改后的文件相同的路径下编译,修改将会丢失。
英文:
You can replace the implementation in the *.pb.go
file itself.
However, the change will be gone if the original proto file is compiled at the same path where the modified file is.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论