登录
首页 >  Golang >  Go问答

向Go结构添加了一些奇怪字段的protobuf消息序列化(转换)

来源:stackoverflow

时间:2024-03-23 20:45:32 126浏览 收藏

使用 protobuf-gen-go 将 protobuf 消息转换为 Go 结构时,会添加一些奇怪的字段(xxx_nounkeyedliteral、xxx_unrecognized),导致无法将数据保存到 MySQL。gogoprotobuf 是一个扩展了 protobuf-gen-go 功能的工具,它可以生成不包含这些奇怪字段的 Go 结构。通过使用 protoc-gen-gofaster 插件,可以解决此问题。

问题内容

我想要一个 api 来保存用户。这是我的用户消息:

message user {
    int32 uid = 1;
    string username = 2;
    string password = 3;
}

我使用 protoc-gen-go 将其转换为 go 结构。我发现添加了一些奇怪的字段(xxx_nounkeyedliteralxxx_unrecognized)。

type User struct {
    Uid                  int32    `protobuf:"varint,1,opt,name=uid,proto3" json:"uid,omitempty"`
    Username             string   `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"`
    Password             string   `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"`
    XXX_NoUnkeyedLiteral struct{} `json:"-"`
    XXX_unrecognized     []byte   `json:"-"`
    XXX_sizecache        int32    `json:"-"`
}

由于这些字段,我无法将其保存到 mysql,因为我的 mysql 表没有这些字段。有人有好的建议吗?我必须创建另一个结构来将 mysql 表转换为 protobuf 消息?


解决方案


gogoprotobuf 是 golang/protobuf 的一个分支,具有额外的代码生成功能。

protoc-gen-gogofaster(没有xxx_unrecognized,更少的指针字段)

go get github.com/gogo/protobuf/protoc-gen-gofaster

go install github.com/gogo/protobuf/protoc-gen-gofaster

protoc --gofaster_out=plugins=grpc:. my.proto

以上就是《向Go结构添加了一些奇怪字段的protobuf消息序列化(转换)》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>