从接口确定底层类型

在 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")
    }
}