有经验的同学都会知道,golang 的编译器并不会在代码编译的时候帮我们检查自定义的类型是否正确实现了某个接口。想象一下,一个复杂的应用程序,在编译的时候没有问题,上线运行了很长时间也没有问题。但是,某天程序突然出现了 Panic !如果没有处理好 Panic 那就会直接宕机。如果回头发现居然是没有正确的实现某个接口,心中想必是万马奔腾的。个中滋味的酸爽想必尝试过的人才懂。   要避免重蹈覆辙掉进坑里,就必须想个法子解决这种低级错误——在编译时确认类型是否正确实现了接口。

  解决的方法也是很简单。例如,我们有类型 T,应该实现 **sort.Interface** 接口用以排序。只需要在定义类型 T 后添加一行代码就能在编译时检查类型 T 是否正确的实现 **sort.Interface**

  如果类型 T 实现了 **sort.Interface** 皆大欢喜,否则在编译的时候我们会得到对应的断言。   需要注意的是,Golang 会区分结构体和指针上的 methods,一定要选对检查方法:

  最后,国庆快乐~