接口转换
type Xer interface {
A()
}
type X int
func (X) A() {}
func main() {
var o X
var e Xer = o
a, ok := e.(X)
println(a, ok)
}
func main() {
var x interface{} = func(x int) string {
return fmt.Sprintf("d:%d", x)
}
switch v := x.(type) { //局部变量v是类型转换后的结果。
case nil:
println("nil")
case *int:
println(*v)
case func(int) string:
println(v(100))
case fmt.Stringer:
fmt.Println(v)
default:
println("unknown")
}
}
接口转换成原始类型有两种方式,
- 第一种方式是典型的 OK 模型,通过 OK 判断是否实现了这个接口能不能转换成原始类型,或者转换成另外接口。
- 另外一种通过 switch 方式多组匹配,接受一个类型判断属于什么,可能属于 nil,可能属于指