我有这段代码:
if (reflect.TypeOf(device).String() == "*types.VirtualDisk") {
disk := device.(types.VirtualDisk)
fmt.Printf("%v - %v \n", "capacityInKB", disk.CapacityInKB)
}
我得到了:
不可能的类型断言:types.VirtualDisk没有实现 types.BaseVirtualDevice(GetVirtualDevice方法有指针接收器)
但如果我将其修改为
if (reflect.TypeOf(device).String() == "*types.VirtualDisk") {
//disk := device.(types.VirtualDisk)
fmt.Printf("%v - %v \n", "capacityInKB", device)//disk.CapacityInKB)
}
它可以工作并打印对象的所有属性。我怎么想转换它?
答案 0 :(得分:6)
错误提示您要键入断言的类型为*types.VirtualDisk
而不是types.VirtualDisk
。
此外,您尝试做的反射技巧完全没必要,因为有special form of the type assertion报告断言是否成立。
见这个例子:
if disk, ok := device.(*types.VirtualDisk); ok {
// Type assertion holds, disk is of type *types.VirtualDisk
// You may use it so
}