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中列出实现该接口的类型。

你可能感兴趣的:(golang)