登录
首页 >  Golang >  Go问答

无法在非接口值上键入开关

来源:Golang技术栈

时间:2023-04-12 10:28:30 401浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《无法在非接口值上键入开关》,就很适合你,本篇文章讲解的知识点主要包括golang。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我正在使用以下虚拟代码进行类型断言,但出现错误:

无法在非接口值上键入开关

有谁知道那是什么意思?

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_和关于接口的 golang 文档http://golang.org/doc/effective_go.html#interfaces

以上就是《无法在非接口值上键入开关》的详细内容,更多关于golang的资料请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>