【发布时间】:2019-11-06 21:41:14
【问题描述】:
是否可以将自定义类型断言为其基本类型?
例如,如果我有以下情况
type A []interface{}
var x = map[string]interface{}{
"hello":"a",
"world":A{"b","c"},
}
y := x["world"]
然后,如果我尝试通过 y.([]interface{}) 键入 assert,我会收到错误 //interface {} is A, not []interface {}。
编辑:正如下面的答案所指出的,我可以通过y.(A) 断言类型 A。问题源于 x 由 Mongo 驱动程序提供。一些驱动实现了自己的类型,例如官方的 mongo 驱动为[]interface 类型实现了一个bson.A 类型。如果我切换驱动程序,那么我的类型断言需要更改以匹配它们的自定义类型,这是我想要避免的。
【问题讨论】:
-
如果您需要访问特定于动态类型的某些东西,例如结构字段或不属于接口的方法,您只需要断言接口值的类型。如果您依赖于特定于特定驱动程序的某些东西,那么该代码显然无法与另一个驱动程序一起使用。那就不要那样做。仅依赖于与您想要支持的所有驱动程序一起使用的一些通用接口。
标签: go types type-conversion type-assertion