我是Go语言开发者。我们的团队选择使用协议缓冲区来转换数据。我选择了这个protobuf包:https://github.com/golang/protobuf.但是,这个包没有方法来处理协议缓冲区中的扩展
字段。我只在protoc生成的类文件中找到了以下代码:
var E_Height = &proto.ExtensionDesc{
ExtendedType: (*Person)(nil),
ExtensionType: (*int32)(nil),
Field: 110,
Name: "eg.Height",
Tag: "varint,110,opt",
}
func init() {
proto.RegisterExtension(E_Height)
}
那么,如何在Go中设置/获取扩展名
字段?
发件人:https://developers.google.com/protocol-buffers/docs/reference/go-generated#extensions
例如,给定以下定义:
extend Foo {
optional int32 singular_int32 = 1;
repeated bytes repeated_string = 2;
optional Bar repeated_message = 3;
}
可通过以下方式访问扩展值:
m := &somepb.Foo{}
proto.SetExtension(m, extpb.E_SingularInt32, int32(1))
proto.SetExtension(m, extpb.E_RepeatedString, []string{"a", "b", "c"})
proto.SetExtension(m, extpb.E_RepeatedMessage, &extpb.Bar{})
v1 := proto.GetExtension(m, extpb.E_SingularInt32).(int32)
v2 := proto.GetExtension(m, extpb.E_RepeatedString).([][]byte)
v3 := proto.GetExtension(m, extpb.E_RepeatedMessage).(*extpb.Bar)
得到分机。。。
yourExtendedEvent := &path_to_your_events.Person{}
err := proto.Unmarshal(yourBytes, yourExtendedEvent)
if err != nil {
// handle error case
}
extendedEvent, extendedError := proto.GetExtension(
yourExtendedEvent,
path_to_your_events.E_Height,
)
...
正在设置扩展名。。。
yourExtendedEvent := &path_to_your_events.Person{
Field1: proto.Uint64(1),
Field2: proto.String("foo"),
}
height := &path_to_your_events.Height {
Field1: proto.Int64(120),
}
err := proto.SetExtension(
yourExtendedEvent,
path_to_your_events.E_Height,
height,
)
if err != nil {
// handle error case
}
编辑
实际上,如果我读得对的话,你的扩展名只是一个字段(一个int32),所以我不知道你实际上有一个Height
类型。如果不是,可能更像
height := proto.Int32(120)
然后将高度设置为单个字段,而不是单独的原型。
这条线
ExtensionType: (*int32)(nil),
让我觉得这将是一个单一的领域,而我们的扩展看起来更像
ExtensionType: (*SomeOtherType)(nil),
这是一个很好的资源测试ExtensionsRoundTrip
我为我创建的驱动程序的测试创建了一个自定义标记。我正在寻找一种方法,使用新的Junit5 jupiter扩展在beforeach和AfterEach期间初始化和退出这个驱动程序。 我看到有一个AnnotationSupport.class应该可以帮助你获得用特定注释标注的字段,但是没有找到任何例子。 我想要的只是能够使用扩展中用我的注释标注的字段。
我有一个proto,它有一条包含扩展名的消息 我有另一个proto,它有扩展(只显示下面的一个扩展) 通过protobuf代码,我能够获得MsgB的描述符和FileDescriptor,并从中检索FieldDescriptor类型的扩展名“MsgB”。我通过protobuf代码查找扩展,而不是使用MsgB协议生成的代码,因为我试图迭代所有扩展消息,而不是将每个消息硬编码为可变扩展。(我理解Muta
问题内容: 我希望获取正在上传的图像的文件扩展名,但我只获得了一个数组。 有没有办法只是获得扩展本身? 问题答案: 无需使用字符串函数。您可以使用实际为您想要的东西设计的东西:
问题内容: 创建像这样的结构后: 如何创建Foo的新实例并设置并获取名称?我尝试了以下方法: 没有打印任何内容,因为名称为空。那么如何设置结构中的字段? 工作操场 问题答案: 评论(和工作)示例: 测试并进行Go之旅,以了解有关方法和指针以及Go的基础知识的更多信息。
目前开源社区已经围绕Protobuf和gRPC开发出众多扩展,形成了庞大的生态。本节我们将简单介绍验证器和REST接口扩展。 4.6.1 验证器 到目前为止,我们接触的全部是第三版的Protobuf语法。第二版的Protobuf有个默认值特性,可以为字符串或数值类型的成员定义默认值。 我们采用第二版的Protobuf语法创建文件: syntax = "proto2"; package main;
本文向大家介绍php如何获取文件的扩展名,包括了php如何获取文件的扩展名的使用技巧和注意事项,需要的朋友参考一下 网上也有很多类似的方法,不过都存在这样那样的不严谨的问题,本文就不一一分析了,这里只给出最正确的利用php 获取文件扩展名(文件后缀名)的方法。 函数中用到了php内置函数pathinfo 这个函数,下面分析一下这个函数的意思和用法: 定义和用法 pathinfo() 函数以数组的形