panic: protobuf tag not enough fields
1. 报错内容
golang: panic: protobuf tag not enough fields in AwardMailData.state: goroutine 69 [running]: github.com/gogo/protobuf/proto.(*unmarshalInfo).computeUnmarshalInfo(0xc0004e0500) D:/go/pkg/mod/github.com/gogo/protobuf@v1.3.2/proto/table_unmarshal.go:341 +0x2154 github.com/gogo/protobuf/proto.(*unmarshalInfo).unmarshal(0xc0004e0500, {0xc0006927d0}, {0xc000309bd0, 0x3, 0x8}) D:/go/pkg/mod/github.com/gogo/protobuf@v1.3.2/proto/table_unmarshal.go:138 +0x85 github.com/gogo/protobuf/proto.(*InternalMessageInfo).Unmarshal(0xc000510940, {0x148a830, 0xc0006927d0}, {0xc000309bd0, 0x3, 0x8}) D:/go/pkg/mod/github.com/gogo/protobuf@v1.3.2/proto/table_unmarshal.go:63 +0x165 github.com/gogo/protobuf/proto.(*Buffer).Unmarshal(0xc000410ba0, {0x148a830, 0xc0006927d0}) D:/go/pkg/mod/github.com/gogo/protobuf@v1.3.2/proto/decode.go:424 +0x417
2. pb文件引用情况
- pb文件(api.pb.go)
// versions:
// protoc-gen-go v1.36.10
// protoc v5.28.0--rc3
// source: client_api.proto
package api
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
unsafe "unsafe"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
- 引用模块文件(handle.go)
import (
"context"
pb "games/api"
"games/app/mail/internal/service"
"github.com/gogo/protobuf/proto"
"github.com/redis/go-redis/v9"
)
3. 报错原因
解析pb文件库和生成库不一致
-
生成库: "google.golang.org/protobuf/runtime/protoimpl"
-
解析库: "github.com/gogo/protobuf/proto"
4. 解决
解析库替换为: "google.golang.org/protobuf/proto"
5. 版本查看
- protoc --version
libprotoc 28.0-rc3
- go list -m google.golang.org/protobuf
google.golang.org/protobuf v1.36.7
浙公网安备 33010602011771号