我有一些要映射在[]string
中的数据数组。我可以通过两种方式做到这一点:
一种)
// someData
s := someData.([]string)
在这种情况下,将在控制台上列出错误后停止执行。
b)
// someData
s, ok := someData.([]string)
在这种情况下,不会发生任何错误,但s的值为零
我想在这种类型断言失败的情况下记录错误,而不停止执行。但是,当我使用类型(b)时,看不到错误详细信息。
我能想到的唯一解决方案是使用
reflect.TypeOf
并打印两种类型。使用解决方案(b)时,还有其他方法可以得到此错误吗?
最佳答案
您可以自己构造日志消息。无需显式调用reflect
,因为有一个产生该类型的printf格式字符串%T
。
s, ok := someData.([]string)
if !ok {
log.Printf("got data of type %T but wanted []string", someData)
... handle the failure somehow
}
在不了解上下文的情况下,我很难生成有用的信息性日志语句,但是您可以根据自己的用例进行调整。