从接口值片段键入断言
在 Go 中,尝试从接口值片段键入断言,例如 []节点为[]符号,可能会导致错误。虽然Symbol实现了Node接口,但切片[]Node不是接口类型。
错误消息,“无效类型断言:args.([]Symbol)(左侧非接口类型[]Node” ),”表示接口值切片 ([]Node) 不能直接断言为接口类型([]符号)。
原因
切片是一种独特的非接口类型,具有自己的一组方法。与接口不同,它不会从其包含的元素继承方法。因此,假设接口值的切片本身就是一个接口是没有意义的。
解决方案
要在这种情况下正确键入断言,您可以使用循环将切片的每个元素转换为所需的类型。例如,以下代码:
symbols := make([]Symbol, len(args)) for i, arg := range args { symbols[i] = arg.(Symbol) } fixed, rest := parseFormals(symbols)
创建一个新的 Symbol 值、符号切片,并迭代 args 切片,将每个元素转换为 Symbol 类型。然后,您可以使用符号进行进一步处理。
请记住,只有当您绝对确定断言会成功时才应使用类型断言。否则,运行时可能会出现panic。
以上是如何在 Go 中安全地从接口值片段中键入断言?的详细内容。更多信息请关注PHP中文网其他相关文章!