如何获取protobuf某个字段的类型? 比如 message A{ int a1 = 1; google.protobuf.DoubleValue a2 = 2 } 我想要有一个函数,我传a2,给我返回值为google.protobuf.DoubleValue
时间: 2023-07-25 09:08:32 浏览: 49
你可以使用反射机制获取protobuf某个字段的类型,具体实现方式如下:
1. 导入反射包
```go
import "reflect"
```
2. 获取message的类型
```go
msgType := reflect.TypeOf(*A{})
```
3. 根据字段名称获取字段的类型
```go
field, _ := msgType.FieldByName("a2")
fieldType := field.Type
```
4. 获取字段类型的名称
```go
typeName := fieldType.String()
```
完整代码示例:
```go
package main
import (
"fmt"
"reflect"
"google/protobuf/wrappers"
)
type A struct {
A1 int32 `protobuf:"varint,1,opt,name=a1,proto3" json:"a1,omitempty"`
A2 *wrappers.DoubleValue `protobuf:"varint,2,opt,name=a2,proto3" json:"a2,omitempty"`
}
func main() {
msgType := reflect.TypeOf(*A{})
field, _ := msgType.FieldByName("a2")
fieldType := field.Type
typeName := fieldType.String()
fmt.Println(typeName) // 输出 "google/protobuf/wrappers.DoubleValue"
}
```