从接口检测基础类型

在Go程序中,有时候需要知道传过来的参数其底层的类型是什么,这可以通过一个类型开关器来完成。假设我们有两个结构体:
type Rembrandt struct{}
func (r Rembrandt) Paint() {}
type Picasso struct{}
func (r Picasso) Paint() {}
它们都实现了如下 Painter 接口:
type Painter interface {
Paint()
}
然后,我们可以用如下的类型选择器来检测底层类型:
func WhichPainter(painter Painter) {
switch painter.(type) {
case Rembrandt:
fmt.Println("The underlying type is Rembrandt")
case Picasso:
fmt.Println("The underlying type is Picasso")
default:
fmt.Println("Unknown type")
}
}