我有一些要映射在[]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
}

在不了解上下文的情况下,我很难生成有用的信息性日志语句,但是您可以根据自己的用例进行调整。

10-08 18:07