当前位置: 首页 > 面试题库 >

无法在非接口值上键入switch

秦永望
2023-03-14
问题内容

我正在使用以下伪代码处理类型断言,但出现错误:

无法键入打开非接口值

有人知道这是什么意思吗?

package main

import "fmt"
import "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 := n.(type) {
    case Stringer:
        fmt.Println("Stringer:", v)
    default:
        fmt.Println("Unknown")
    }
}

http://play.golang.org/p/Ti4FG0m1mc


问题答案:

类型开关需要自省的接口。如果将已知类型的值传递给它,则它会炸毁。如果您创建一个接受接口作为参数的函数,它将起作用:

func typeSwitch(tst interface{}) {
    switch v := tst.(type) {
        case Stringer:
           fmt.Println("Stringer:", v)
        default:
           fmt.Println("Unknown")
    }
}

请参阅http://play.golang.org/p/QNyf0eG71_上的完整代码,以及接口http://golang.org/doc/effective_go.html#interfaces上的golang文档。



 类似资料:
  • 我试图用GlobalKTable连接KStream,连接不完全在键上。 我想通过empIdOverLoginUserId的值通过employeesDetails的键将empIdOverLoginUserId与employeesDetails连接

  • 嗨,当我尝试在下面的类中注入Doa接口时,我正在使用mvvm和dagger2 我的接口类

  • 问题内容: 我有一个定义方法的接口。我有一个 实现 此接口的结构。在其中,我已经从该接口实现了方法,并且还定义了其他方法。 例如: 在操场上:https : //play.golang.org/p/B1GgoNToNl_l 在此,WagTail()不是Animal接口的一部分,但属于Dog结构。运行此代码会出现错误 dog.WagTail未定义(动物类型没有字段或方法WagTail)。 有没有一种

  • 我正在尝试将入口连接到静态ip。我似乎在遵循所有教程,但我似乎仍然无法将静态ip连接到入口。我的入口文件如下(参考静态ip“测试ip”) 然而,当我跑步时 它返回 没有给出地址。在VPC网络[外部IP地址]中,静态ip是存在的,它是全局的,但它一直说:In use by无 给予 我错过了什么?

  • 我在Mac上用IntelliJ IDEA做一个项目,我总是遇到一个我不能打字的问题。偶尔,当我切换到另一个应用程序,然后再切换回IntelliJ时,我不能输入任何东西,并且当我点击东西时,光标不会出现在文本上。有没有人知道这是什么原因造成的?在1-2分钟后,它会恢复正常,但它开始出现更频繁,这是相当令人沮丧的不能打字和没有办法解决它。 这是我使用的IntelliJ版本: IntelliJ IDEA

  • 本文向大家介绍C++编写非侵入式接口,包括了C++编写非侵入式接口的使用技巧和注意事项,需要的朋友参考一下 终于写到c++的非侵入式接口了,兴奋,开心,失望,解脱,…… 。在搞了这么多的面向对象科普之后,本人也已经开始不耐烦,至此,不想做太多阐述。 虽然,很早就清楚怎么在c++下搞非侵入式接口,但是,整个框架代码,重构了十几次之后,才终于满意。支持给基本类型添加接口,好比int,char,cons