如何测试元素是否为 Any 类型

问题描述

如何在 Go 中测试结构的元素是否为 Any (protobuf): *any.Any 类型? 我想遍历结构的每个元素,并根据元素的类型做一个 switch case。 这是消息的字段描述符:

FieldDescriptor{Syntax: proto3,FullName:,Number: 3,Cardinality: optional,Kind: message,HasJSONName: true,JSONName:,HasPresence: true,Oneof:,Message: google.protobuf.Any}

这是我的代码

func doSomething(src protoreflect.Message) {
    src.Range(func(fd protoreflect.FieldDescriptor,v protoreflect.Value) bool {
            switch {
            case fd.IsList():
                // do something
            case fd.IsMap():
                // do something
            case fd.Message() != nil:
                // do something
            case fd.Kind() == protoreflect.BytesKind:
                // do something
            case *test if message is Any* :
                // do something
            default:
                // do something
            }
        return true
        })
}

我想要一个比 ex 更正确的方法

if fd.Message() != nil{
     fd.Message().FullName() == "google.protobuf.Any"
}

解决方法

您可以使用 switch case 进行类型检查。

 switch v := fd.(type) { 
    default:
        fmt.Printf("unexpected type %T",v)
    case string:
        //do something
    } 

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...