# 从接口检测基础类型

在Go程序中，有时候需要知道传过来的参数其底层的类型是什么，这可以通过一个类型开关器来完成。假设我们有两个结构体：

```go
type Rembrandt struct{}

func (r Rembrandt) Paint() {}

type Picasso struct{}

func (r Picasso) Paint() {}
```

它们都实现了如下 `Painter` 接口：

```go
type Painter interface {
    Paint()
}
```

然后，我们可以用如下的类型选择器来检测底层类型：

```go
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")
    }
}
```
