Mar*_*lov 1 interface go type-assertion
我有这段代码:
if (reflect.TypeOf(device).String() == "*types.VirtualDisk") {
disk := device.(types.VirtualDisk)
fmt.Printf("%v - %v \n", "capacityInKB", disk.CapacityInKB)
}
Run Code Online (Sandbox Code Playgroud)
我得到了:
不可能的类型断言: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)
}
Run Code Online (Sandbox Code Playgroud)
它可以工作并打印对象的所有属性.我怎么想转换它?
该错误提示要输入断言的类型*types.VirtualDisk,而不是types.VirtualDisk.
您尝试做的反射技巧也是完全没必要的,因为有一种特殊形式的类型断言可以报告断言是否成立.
看这个例子:
if disk, ok := device.(*types.VirtualDisk); ok {
// Type assertion holds, disk is of type *types.VirtualDisk
// You may use it so
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
415 次 |
| 最近记录: |