Cannot type switch on non-interface value

前端 未结 4 1939
礼貌的吻别
礼貌的吻别 2021-02-04 00:51

I am playing with type assertion using the following dummy code, and I got the error:

cannot type switch on non-interface value

Doe

相关标签:
4条回答
  • 2021-02-04 01:12

    I figured out the answer, which is to cast n to interface{} before the type assertion:

    switch v := interface{}(n).(type)
    
    0 讨论(0)
  • 2021-02-04 01:14

    Type switches require an interface to introspect. If you are passing a value of known type to it it bombs out. If you make a function that accepts an interface as a parameter, it will work:

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

    See the full code here http://play.golang.org/p/QNyf0eG71_ and the golang documentation on interfaces http://golang.org/doc/effective_go.html#interfaces.

    0 讨论(0)
  • 2021-02-04 01:17

    There are no typecasts in Go. You are doing a type conversion.

    0 讨论(0)
  • 2021-02-04 01:25

    There are two kinds of type conversions

    1. conversion between basic data types. For this we can use the direct casting

      i := 48

      str := string(i)

    2. But type conversion using value.(type) is for conversion among the class hierarchy, (e.g. where we want to get the specific implementation from the interface). Else, we get the above error.

    0 讨论(0)
提交回复
热议问题