Home  >  Article  >  Backend Development  >  Why Am I Getting "Cannot Type Switch on Non-Interface Value" in Go?

Why Am I Getting "Cannot Type Switch on Non-Interface Value" in Go?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-09 20:32:02676browse

Why Am I Getting

Error Handling in Go: Resolving "Cannot Type Switch on Non-Interface Value"

While attempting to implement type assertion in Go, you may encounter the error message: "cannot type switch on non-interface value." This error arises when attempting to perform a type switch on a value that is not an interface type.

Consider the following code snippet:

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")
    }
}

When running this code, you will encounter the "cannot type switch on non-interface value" error. To resolve this, we need to cast the variable n to an interface{} type before performing the type switch.

switch v := interface{}(n).(type)

This cast converts the concrete type of n (*Number) to the interface type interface{}. Interfaces in Go act as a contract, allowing any value to be stored and accessed through common methods. By casting n to interface{}, we can then perform the type switch on the resulting interface value.

When we run the modified code, it will successfully print "Stringer: 1", as expected. This demonstrates that type assertion in Go requires the value to be an interface type, and casting to interface{} enables type switches on non-interface values.

The above is the detailed content of Why Am I Getting "Cannot Type Switch on Non-Interface Value" in Go?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn