Protobuf 生成go指针的问题

发布于 2022-09-11 15:58:53 字数 709 浏览 40 评论 0

我现在定义的proto文件如下

syntax = "proto2";
message Test1 {}
message Test2 {
    required  Test1 test1 = 1;
}
message Test3 {
    required Test2 test2 = 1;
}

这样我就会得到一个 go文件,大概内容是

type Test3 {
    Test2 *Test2 
}

type Test2 {
    Test1 *Test1
}

type Test1 {}

然后当我使用的时候,就会非常麻烦

var test3 = new(Test3)
test3.Test2 = new(Test2) // 必须初始化指针
test3.Test2.Test1 = new(Test1) // 同上
fmt.Printf(test3.Test2.Test1) // 现在才能使用

如上所示,我为了使用Test1得初始化很多次,因为业务的问题,层级可能有四五层,这样对于编码来说,太麻烦了,我现在想到的是有两个思路

  1. 找到一个方法,一次性初始化指针本身已经他下面的指针
  2. 找到 protobuf是否有不生成指针,只生成结构体的方法,或者protobuf是否有生成第一种思路的函数

但是对于这两条路都没走通,请各位指教。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

风流物 2022-09-18 15:58:54

我也有这个需求,如下:PUBResponse 是只要RPC不出错都应该有,现在客户端每次都要判断resp是否为nil,太麻烦了。

message PUBResponse {

int32 code = 1;
string msg = 2;

}
message FindResponse {

PUBResponse resp = 1;
int64 total = 2;

}

type FindResponse struct {

Resp                 *PUBResponse `protobuf:"bytes,1,opt,name=resp,proto3" json:"resp,omitempty"`
Total                int64        `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"`

json:"nodes,omitempty"`

XXX_NoUnkeyedLiteral struct{}     `json:"-"`
XXX_unrecognized     []byte       `json:"-"`
XXX_sizecache        int32        `json:"-"`

}

花期渐远 2022-09-18 15:58:54

第一种可以啊,写个NewXXX的方法返回对象,你不用一次次new,类似&struct{}这样返回就可以了

往日情怀 2022-09-18 15:58:54

其实不太明白为什么都要初始化,没有必要把每一个都初始化的,为nil就为nil,没什么关系,取的时候判断一下是否为nil就可以了。
不过还是建议把设计简单化,不要这样设计,依赖层次太多。

半仙 2022-09-18 15:58:53
t:=&Test3 {
    Test2 &Test2 {
        Test1 &Test1{}
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文