具体写法
// 摘自gin框架routergroup.go
type IRouter interface{ ... }
type RouterGroup struct { ... }
var _ IRouter = &RouterGroup{} // 确保RouterGroup实现了接口IRouter
// 使用var _ IRouter = (*RouterGroup)(nil)的写法功能相同
可以看见gin实现了一个匿名接口,这个接口没办法被使用。
具体作用
定义一个结构体作为接口内部方法的接收者,然后实现以该结构体作为接收者的方法。但编辑完以该结构体定义为核心功能的go文件后,不能确切知道是否完全实现接口,是否有遗漏的方法。通过赋值给一个匿名接口,可以在编译阶段暴露该问题,因为go编译器可以检查到这个匿名接口是否被实现。
实际情况
实现一个匿名接口后,goland可以帮忙补全代码,省事儿!doge!