理解类型切换错误
在 Go 中,在非接口变量上使用类型切换会导致错误“cannot type switch on非界面值。”要解决此问题,有必要在尝试类型切换之前将变量转换为适当的接口类型。
在给定的示例中,代码尝试对变量 n(它是一个实例)执行类型切换Number 结构体的。但是,Number 结构体没有实现任何接口,因此不能直接在类型切换中使用。
解决错误
要修复错误,您必须首先将 n 转换为 interface{} 类型,它表示一个空接口。这会将 n 转换为可以容纳任何类型的值。然后,在类型开关中,您可以使用 type 关键字断言基础值的实际类型。
以下是更正后的代码的外观:
import ( "fmt" "strconv" ) type Stringer interface { String() string } type Number struct { v int } func (number *Number) String() string { return strconv.Itoa(number.v) } func main() { n := &Number{1} switch v := interface{}(n).(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") } }
通过此更改,代码成功打印“Stringer:1”。
以上是为什么我的 Go 代码会抛出“无法在非接口值上键入 switch”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!