kratos 疑惑记录
背景
- 使用kratos tool protoc *.proto 编译生成 grpc 与 http 代码
- 在 proto 代码中引用
import "google/protobuf/timestamp.proto"
; 使用*timestamp.Timestamp 类型的对象
现象
*.pb.go 文件中, *timestamp.Timestamp 类型的对象编译失败
api/objectStorageService.pb.go:1834:31: m.LastModified.MarshalToSizedBuffer undefined (type *timestamppb.Timestamp has no field or method MarshalToSizedBuffer)
api/objectStorageService.pb.go:2382:31: m.CreationDate.MarshalToSizedBuffer undefined (type *timestamppb.Timestamp has no field or method MarshalToSizedBuffer)
api/objectStorageService.pb.go:2642:31: m.LastModified.MarshalToSizedBuffer undefined (type *timestamppb.Timestamp has no field or method MarshalToSizedBuffer)
api/objectStorageService.pb.go:2746:21: m.LastModified.Size undefined (type *timestamppb.Timestamp has no field or method Size)
api/objectStorageService.pb.go:2997:21: m.CreationDate.Size undefined (type *timestamppb.Timestamp has no field or method Size)
api/objectStorageService.pb.go:3125:21: m.LastModified.Size undefined (type *timestamppb.Timestamp has no field or method Size)
api/objectStorageService.pb.go:3589:28: m.LastModified.Unmarshal undefined (type *timestamppb.Timestamp has no field or method Unmarshal)
api/objectStorageService.pb.go:5023:28: m.CreationDate.Unmarshal undefined (type *timestamppb.Timestamp has no field or method Unmarshal)
api/objectStorageService.pb.go:5817:28: m.LastModified.Unmarshal undefined (type *timestamppb.Timestamp has no field or method Unmarshal)
原因阐述
kratos 动态生成 grpc 代码时 ,使用的是 protoc --gofast_out=plugins=grpc:. *.proto ,本质上使用的是 protoc-gen-gofast
直接使用 protoc --go_out=plugins=grpc:. *.proto 生成文件没有问题,即使用 protoc-gen-go 没有问题
解决方案
protoc --go_out=plugins=grpc:. *.proto