如何在golang中记录类型断言错误?

Pra*_*eek 9 error-handling go type-assertion

我有一些我要映射的数据[]string.我可以用两种方式做到:

一个)

// someData
s := someData.([]string)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,执行将在控制台上列出错误后停止.

b)

// someData
s, ok := someData.([]string)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,不会发生错误,但s将具有零值


我想在不停止执行的情况下在这种类型的断言失败案例中记录错误.但是,当我使用类型(b)时,我看不到错误详细信息.

我能想到的唯一解决方案是使用reflect.TypeOf和打印两种类型.

使用解决方案(b)时,还有其他方法可以解决错误吗?

Pau*_*kin 17

您可以自己构建日志消息.不需要显式调用,reflect因为有一个printf格式字符串%T可以生成类型.

s, ok := someData.([]string)
if !ok {
    log.Printf("got data of type %T but wanted []string", someData)
    ... handle the failure somehow
}
Run Code Online (Sandbox Code Playgroud)

在不了解上下文的情况下,我很难生成有用的信息性日志语句,但您可以根据自己的使用情况调整该想法.

  • 令人惊讶的是,golang 不需要检查类型断言是否有效。无法检查类型断言的有效性会不会导致运行时错误? (2认同)