【Go语言】interface 和 struct 简单使用

昨天,2014年7月29日,SAE二级域名又一次打不开了……今天竟然不给补贴豆豆,真生气!!!

今天讨论一下interface和struct在golang中的简单用法。
interface ,翻译过来是接口 ,在JAVA和C++中也有接口的概念,并且接口是面向对象语言的基本概念。在golang中,接口并不是传统的那种意义,并且说,应该是很不相同的,只不过也用interface来表示。所以有时候英语还是有一点儿用的,你翻译过来,就没有那种感觉了。先来看看golang权威书籍:《The way to Go》中是怎么描述interface的

{我就不用翻译了吧……看英语顺眼(⊙o⊙)}

总之正是因为有了interface ,于是很多面向对象(我想是下次是应该用OO这个高大上的词)的功能都可以实现了。正如书中所说:接口只是提供一些方法的集合但并不去实现那些方法,是一种抽象的概念,而要实现某一个interface,只需要contains all methods 就可以了,并没有“继承”的概念。OO中的很多概念我们在Go中是不需要的,于是现在要说Golang是POP还是OOP,我是觉得没有必要做区分了:Golang is the 21st century  C.  这个定位才最准确!
下面先上一段代码:

可以看出前两个是interface 最后一个是struct。你可能有一点儿疑问:为什么CollageStudenter 这个interface 竟然有一个Studenter 的字段?事实上就是如此:这种就是表明了那种类似的继承关系,Studenter有Say和Play的方法,并且做了 CollageStudenter 的字段,那么CollageStudenter也就有了Say和Play 的方法了。同时再拥有了自己的Research的方法,其实CollageStudent这个interface 有三个方法的。
结构体struct这个东东和C语言中很类似,类比Java/C++等OO语言其实就是class,有属性,有方法,只是定义的方式不同,感觉都是一样的。
下面来看看struct的方法怎么定义:

struct只要实现了interface 的方法,那么就是实现了相应的interface  这个就是重点了,同时struct也可以有自己的method 的,这个不冲突。更加直接的精确的描述在下图:

大家千万要注意在给结构体定义方法的时候,是使用了 self *struct这种的方式,严格说来现代编程语言中是忌讳指针的,此处的使用却是相当合理的,并且也是最标准的指针使用方式,self这个和python中的self以及java中的this 都是异曲同工,功能也很类似,不赘述。

我们在使用interface时可以很灵活,但是正是因为灵活,往往也会出一些错误,这么说吧,interface其实和OO中,特别是Java中的Object class 很是类似,而有的时候在传递消息是,又和泛型<T>差不多。今天先简单讲一讲,后期会有专门的interface使用讨论。

Ok,既然都已经定义好了,那么就可以使用了,看下面的图,千万不要惊讶!

我尽量把每一个对象中所有能被调用的方法都调用出来了,你可以清晰的看到,两个interface之间的区别,interface和struct之间的区别。struct只要实现了某一个interface,就可以实例化一个interface的元素,而struct可以调出相关的属性字段,这个和interface是稍微有一点区别的。

OK,今天就先到这儿。

刘凯宁@C2P
2014年7月30日

 

 

Share

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*


*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>