我正在使用以下伪代码处理类型断言,但出现错误:
无法键入打开非接口值
有人知道这是什么意思吗?
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文档。