golang中,一般strcut包含 interface类型后,struct类型都需要实现 interface导出的接口,从而成为相应的 interface接口类。
实际上,struct包含interface之后,并不需要实现interface的接口,也能成为 interface接口类。
代码如下:
type newEr interface { New() } type testInterface interface { newEr Done() <-chan struct{} } type kkTest struct { testInterface } func NewTest() newEr { return kkTest{} } func main() { kk := NewTest() i,ok := kk.(testInterface) fmt.Println(i,ok) ch := i.Done() fmt.Println(ch) }
其中 i,ok := kk.(testInterface) 测试成功,也就是说 kkTest 已经是 testInterface 接口类,但是后续 ch := i.Done() 引发 panic,这个也是预料之内的。
相关的应用可以看 context包中的实现,valueCtx部分实现了 Context 接口函数,对其不需要的函数没有实现,如果调用了这些未实现的函数就会导致 panic。这样在程序排错其实是很有好处的,因为调用到这些接口,说明代码其实已经写错了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
一直认为implements只能实现interface,今天看到某个开源项目,prisma+nest,通过prisma的类型来定义entity,发现type也能实现,type不是仅仅是一个类型别名吗? !
TypeScript 如何约束一个 interface ,其中的两个值为2选一, (不能都存在,也不能都不存在) 如下: 这个 interface 目前并不符合我的需求,我的需求是 name 或者 nickName 二选一,该如何改造?或者如何实现呢?
本文向大家介绍MyBatis实现动态SQL的实现方法,包括了MyBatis实现动态SQL的实现方法的使用技巧和注意事项,需要的朋友参考一下 MyBatis 最强大的特性之一就是它的动态语句功能。如果您以前有使用JDBC或者类似框架的 经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在 columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。 尽管与动
本文向大家介绍Pytorch实现GoogLeNet的方法,包括了Pytorch实现GoogLeNet的方法的使用技巧和注意事项,需要的朋友参考一下 GoogLeNet也叫InceptionNet,在2014年被提出,如今已到V4版本。GoogleNet比VGGNet具有更深的网络结构,一共有22层,但是参数比AlexNet要少12倍,但是计算量是AlexNet的4倍,原因就是它采用很有效的Ince
本文向大家介绍C++实现raw_input的方法,包括了C++实现raw_input的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++实现raw_input的方法,分享给大家供大家参考。具体方法分析如下: 用惯了Python,现在写C++的代码感觉有点不太顺畅。今天就来实例演示一下C++实现raw_input的方法。 用过Python的朋友知道,Python中有个raw_inpu
本文向大家介绍python实现ping的方法,包括了python实现ping的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python实现ping的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的Python程序设计有所帮助。