0%

go 编译期判断类型是否实现接口

在看一些源码的过程中,发现一些如下的写法:

1
2
// var _ Interface = (*Type)(nil)
var _ FastInvoker = (*LoggerInvoker)(nil)

其中 FastInvoker 是一个 interface,而 LoggerInvoker 实现了 FastInvoker 的方法。

这样看起来没什么作用,但是却可以帮助我们在编译期就发现 LoggerInvoker 是否实现了 FastInvoker 接口, 因为我们这样写了之后,编译器会去检查,如果 LoggerInvoker 没有实现 FastInvoker 就会报错了。

这样我们就可以在编译的时候发现代码潜在的问题。