Golang校验结构体是否实现了接口

在golang代码中,你可能会遇到这样的情况:

声明了一个接口,声明了一个结构体。用结构体实现了接口的方法,同时,要做出检查:这个结构体是否完整实现了接口的方法。

  • 首先声明一个接口
type Sentinel interface {
    HasAccess() bool
}
  • 声明一个结构体
type Admin struct {}
  • 实现接口方法
func (*Admin) HasAccess() bool {
    return true
}

重点来了:校验该结构体是否实现了接口方法

var _ Sentinel = (*Admin)(nil)

var _ Sentinel = &Admin{}

如果Admin没有实现Sentinel定义的方法,那么代码将在编译阶段无法通过。