【发布时间】:2021-10-05 10:52:45
【问题描述】:
您好,我想知道如果 interface{} 为空,我将如何在 Go 中进行验证。
我试过reflect.TypeOf(v) == nil,但它总是返回false。
var h Bar
var t Foo
pointers := make([]interface{}, 0)
pointers = append(pointers, &h)
pointers = append(pointers, &t)
func test(byteValue []byte, data []interface{}) {
for _, v := range data {
fmt.Println(reflect.TypeOf(v) == nil)
if err := lib.Unmarshal(byteValue, v); err == nil {
fmt.Println(err)
}
}
}
【问题讨论】:
-
“空”是什么意思?你可以直接和
nil比较一个接口,或者你想确定它是否包含一个空的类型,比如切片或映射? -
基本上我传递了一个结构指针,我需要检查它是否为空而没有任何修改的字段。
-
@AegisDev 这不是空的。没有字段是空的。 Go 中的所有类型都有一个zero value。
-
是,带零。
-
您可以控制
Foo和Bar类型吗?这些是您的interface{}切片将包含的唯一具体类型吗?如果是这样,您不需要反思;您可以简单地使用类型开关。见play.golang.org/p/KR467c3E9uY
标签: go reflection