2 回答

TA贡献1943条经验 获得超7个赞
这是我的建议:
将您的原型(及其生成的 makefile)存储在单个 git 存储库中。为了简化导入,每个定义都应该在它们自己的目录中
用版本标记 repo - 尤其是在潜在的重大更改上
从您的微服务中导入特定的 proto defs,例如
import "github.com/me/myproto/protodef2"
使用 go modules(
go v1.11
2019 年引入)确保微服务 X 获得兼容版本的 protobuf Y
第 2 点 - 正如@PaulHankin 提到的 - 尽量不要破坏向后兼容性。可以删除 Protobuf 字段,但只要剩余的字段索引不变,旧的客户端调用仍将与较新的 proto defs 兼容。

TA贡献1864条经验 获得超6个赞
通常会尝试使协议缓冲区向后兼容,以便依赖于 proto 文件的服务在 proto 文件更改时不一定需要更改。请参阅https://developers.google.com/protocol-buffers/docs/proto3#updating
但是,如果要检查,可以使用proto.GetProperties(msgType). 将预期的结构属性放在文字中,并使用reflect.DeepEqual它与您通过调用proto.GetProperties原型的动态类型获得的动态结构属性进行比较。像这样的东西:
func TestMyProtoStructVersion(t *testing.T) {
gotProps := proto.GetProperties(reflect.TypeOf(&mypb.MyProtoStruct{}))
if !reflect.DeepEqual(gotProps, wantMyProtoStructProps) {
t.Errorf("MyProtoStruct proto has changed")
}
}
您可以使用go generate自动创建包含wantMyProtoStructProps您可以包含在测试中的协议缓冲区的预期结构属性 () 的文件的过程。
- 2 回答
- 0 关注
- 122 浏览
添加回答
举报