golang关于.(type)的使用
package main
import "fmt"
type in interface {
String()
}
type A struct {
}
func (a *A) String() {
fmt.Println("I am A!")
}
func (a *A) StringA() {
fmt.Println("I am A! Doing StringA()")
}
type B struct {
str string
}
func (b *B) String() {
fmt.Println("I am B!")
}
func (b *B) StringB() {
fmt.Println("I am B! Doing StringB()")
}
func main() {
var i in
i = &B{}
//t := i.(type) //编译报错:use of .(type) outside type switch
switch t := i.(type) {
case *A:
t.String()
t.StringA()
case *B:
t.String()
t.StringB()
default:
}
}阅读golang net包源码时,遇到了有趣的写法 .(type)
理解是获取接口实例实际的类型指针,以此调用实例所有可调用的方法,包括接口方法及自有方法。
需要注意的是该写法必须与switch case联合使用,case中列出实现该接口的类型。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
