在读他人源码的时候碰到一个自己没读懂的写法:
if r,ok:=w.(io.Reader);ok{
r.Read(&buffer)
}
其中,w 原来是个interface{} 对象指向一个自定义的输入输出插件,实现了 io.Reader 和io.Writer
后来翻了翻,这个写法是go 的type assertion
最典型的type assertion
type Element interface{}
func main(){
var e Element=100
switch value:=e.(type){
case int:
fmt.Println("int",value)
case string:
fmt.Println("string",value)
default:
fmt.Println("unknown")
}
}
而强制类型转换是这么写的
var i=0
s:=string( i)