首页  >  文章  >  后端开发  >  为什么我的 Go 代码会抛出“无法在非接口值上键入 switch”错误?

为什么我的 Go 代码会抛出“无法在非接口值上键入 switch”错误?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-10 15:15:02351浏览

Why does my Go code throw a

理解类型切换错误

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn