Golang范围类型转换

时间:2015-01-19 20:58:18

标签: go

我对此代码感到非常困惑:

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,认为这可能是一个范围问题,但我得到了相同的结果。

1 个答案:

答案 0 :(得分:3)

TypeOf documentation说: TypeOf返回接口{}中值的反射类型。 TypeOf(nil)返回nil。

所以doc的类型为interface {},但TypeOf返回其" true"类型。