我对此代码感到非常困惑:
docs, ok := foo.([]interface {})
if !ok{ panic("assertion failed") }
fmt.Println("The type of docs: ", reflect.TypeOf(docs))
for _, doc := range docs {
fmt.Println("Doc Type: ", reflect.TypeOf(doc))
}
运行时的输出是:
The type of docs: []interface {}
Doc type: bson.D
我不明白。我输入assert foo到[]interface{}
并将其存储在docs中。这可以按预期工作,但是在循环中,我打印出来的第一件事是doc
的类型,它说它是bson.D
。怎么没有interface {}
?我甚至将doc
的名称改为bar
,认为这可能是一个范围问题,但我得到了相同的结果。
答案 0 :(得分:3)
TypeOf documentation说: TypeOf返回接口{}中值的反射类型。 TypeOf(nil)返回nil。
所以doc
的类型为interface {},但TypeOf
返回其" true"类型。