Min*_*gyu 20 interface type-conversion go
我使用以下虚拟代码玩类型断言,我得到错误:
无法在非接口值上键入开关
有谁知道这是什么意思?
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")
}
}
Run Code Online (Sandbox Code Playgroud)
Min*_*gyu 36
我想出了答案,这是投n给interface{}类型断言之前:
switch v := interface{}(n).(type)
Run Code Online (Sandbox Code Playgroud)
det*_*000 24
类型开关需要一个内省的界面.如果你传递一个已知类型的值,它就会爆炸.如果你创建一个接受接口作为参数的函数,它将工作:
func typeSwitch(tst interface{}) {
switch v := tst.(type) {
case Stringer:
fmt.Println("Stringer:", v)
default:
fmt.Println("Unknown")
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅http://play.golang.org/p/QNyf0eG71_的完整代码以及接口http://golang.org/doc/effective_go.html#interfaces上的golang文档.