设为首页 收藏本站
查看: 981|回复: 0

[经验分享] Go学习笔记

[复制链接]

尚未签到

发表于 2015-4-19 06:43:47 | 显示全部楼层 |阅读模式
***看了两周七牛团队翻译的《Go语言程序设计》,基本上领略到了Go语言的魅力。学习一个语言,语法什么的任何人都是很容易学会,难就难在充分领略到这门编程语言的思想。***## 面向对象喂!屌丝码农该找个对象了。除去Java Python Go这三种语言底层以及语法的不同,这里以个人的理解只说说其面向对象方面的思想。一个简单的示例:*描述人,李雷,韩梅梅,他俩都是好学生。*将用 **java**  **python**  **go** 这三种语言分别简单的描述。----------### Java 思想人,是抽象的概念,可以洗衣做饭的灵长目物种,没法特指一样具体的东西,但它也有一些如性别、撒尿这类的属性和功能。/*** 抽象出来的人*/abstract class Human {protected String sex;protected String name;public void setSex(String sex) {this.sex = sex;}public String getSex() {return this.sex;}public void setName(String name) {this.name = name;}public String getName() {return this.name;}abstract void doPee(); // 抽象的方法}这里使用抽象类,是因为名字都是父母起的,但撒尿的方法男女不同。接下来是具象人这个抽象的概念了。这里就固话性别属性并且具体定义撒尿的方式。/*** 具象的男性*/class Male extends Human {public Male() {this.sex = "男";}/*** 实现的方法*/public void doPee() {System.out.println(this.name + " " + this.sex + "站着撒尿.");}}/*** 具象的女性*/class Female extends Human {public Female() {this.sex = "女";}/*** 实现的方法*/public void doPee() {System.out.println(this.name + " " + this.sex + "蹲着撒尿.");}}现在有男人和女人了,然后李磊和韩梅梅就要来折磨我们了Male lilei = new Male();lilei.setName("李磊");System.out.println(lilei.getName() + " " + lilei.getSex() + " " + "出场");Female hanmeimei = new Female();hanmeimei.setName("韩梅梅");System.out.println(hanmeimei.getName() + " " + hanmeimei.getSex() + " " + "出场");lilei.doPee();hanmeimei.doPee();_________________________________________________output: 李磊 男 出场output: 韩梅梅 女 出场output: 李磊 男站着撒尿.output: 韩梅梅 女蹲着撒尿.李磊和韩梅梅都是好学生,我们这里定义学习的接口,这里的接口就是,大家必须得死学傻学,怎么学看你自己。/*** 学习接口*/interface Study {public abstract void learningEnglish();}上面是教育部规定的,李磊韩梅梅作为学生必须得学,男人女人都得经历的。来实现学习接口。class Male extends Human implements Study {............/*** 实现的接口*/public void learningEnglish() {System.out.println(this.name + ": How are you?");}}/*** 具象的女性*/class Female extends Human implements Study {............/*** 实现的接口*/public void learningEnglish() {System.out.println(this.name + ": I'm fine, thank you!");}}............lilei.doPee();hanmeimei.doPee();lilei.learningEnglish();hanmeimei.learningEnglish();_________________________________________________output: 李磊: How are you?output: 韩梅梅: I'm fine, thank you!***java的思想大致就是这么样。很严谨,就像一个老学究,1就是1,2就是2。***这是所有的java代码Main.javapublic class Main {public static void main(String[] args) {Male lilei = new Male();lilei.setName("李磊");System.out.println(lilei.getName() + " " + lilei.getSex() + " " + "出场");Female hanmeimei = new Female();hanmeimei.setName("韩梅梅");System.out.println(hanmeimei.getName() + " " + hanmeimei.getSex() + " " + "出场");lilei.doPee();hanmeimei.doPee();lilei.learningEnglish();hanmeimei.learningEnglish();}}/*** 抽象出来的人*/abstract class Human {protected String sex;protected String name;public void setSex(String sex) {this.sex = sex;}public String getSex() {return this.sex;}public void setName(String name) {this.name = name;}public String getName() {return this.name;}abstract void doPee(); // 抽象的方法}/*** 学习接口*/interface Study {public abstract void learningEnglish();}/*** 具象的男性*/class Male extends Human implements Study {public Male() {this.sex = "男";}/*** 实现的方法*/public void doPee() {System.out.println(this.name + " " + this.sex + "站着撒尿.");}/*** 实现的接口*/public void learningEnglish() {System.out.println(this.name + ": How are you?");}}/*** 具象的女性*/class Female extends Human implements Study {public Female() {this.sex = "女";}/*** 实现的方法*/public void doPee() {System.out.println(this.name + " " + this.sex + "蹲着撒尿.");}/*** 实现的接口*/public void learningEnglish() {System.out.println(this.name + ": I'm fine, thank you!");}}----------### Python 思想python无以言状的灵活,你就是上帝!这里我们只要创建一个根类,其他的东西,随时随地,想加就加。class Human:"""人"""def __init__(self):self.__name = ""self.__sex = ""def setName(self, name):self.__name = namedef getName(self):return self.__namedef setSex(self, sex):self.__sex = sexdef getSex(self):return self.__sexname = property(getName, setName) # 就像java中的POJO setter以及gettersex = property(getSex, setSex) # 就像java中的POJO setter以及getter下面就边执行边丰满它lilei = Human()lilei.sex = "男"lilei.name = "李磊"print "%s %s 出场" % (lilei.name, lilei.sex)hanmeimei = Human()hanmeimei.sex = "女"hanmeimei.name = "韩梅梅"print "%s %s 出场" % (hanmeimei.name, hanmeimei.sex)# Pee的方法def doPee(self, how):print "%s %s %s撒尿" % (self.name, self.sex, how)Human.doPee = doPee #动态绑定方法lilei.doPee("站着")hanmeimei.doPee("蹲着")# 学习的方法def doLearning(self, learn):print "%s: %s" % (self.name, learn)Human.doLearning = doLearning #动态绑定方法lilei.doLearning("How are you?")lilei.doLearning("I'm fine, thank you!")_________________________________________________output: 李磊 男 出场output: 李磊韩梅梅 女 出场output: 李磊 男 站着撒尿output: 韩梅梅 女 蹲着撒尿output: 李磊: How are you?output: 李磊: I'm fine, thank you!***python中一切对象都是鸭子类型,何谓鸭子类型?只要会"嘎嘎"叫的东西都是鸭子。应用到上面场景中,只要具有学习和撒尿方法的对象都可以看作人了。从另一方面说,我对于鸭子只关注它是否能够"嘎嘎"叫,如果能,不管是什么东西,那么它就是一只鸭子; 对于人,只关注他们是否能撒尿与学习,既能撒尿又能学习,他凭什么就不是人?*** ***python和java就好像阴阳之替的东方玄学之余西方哲学。***这是所有的python代码test.py:#!/usr/bin/env python# -*- coding: utf-8 -*-class Human:"""人"""def __init__(self):self.__name = ""self.__sex = ""def setName(self, name):self.__name = namedef getName(self):return self.__namedef setSex(self, sex):self.__sex = sexdef getSex(self):return self.__sexname = property(getName, setName) # 就像java中的POJOsex = property(getSex, setSex) # 就像java中的POJOif __name__ == '__main__':lilei = Human()lilei.sex = "男"lilei.name = "李磊"print "%s %s 出场" % (lilei.name, lilei.sex)hanmeimei = Human()hanmeimei.sex = "女"hanmeimei.name = "韩梅梅"print "%s %s 出场" % (hanmeimei.name, hanmeimei.sex)# Pee的方法def doPee(self, how):print "%s %s %s撒尿" % (self.name, self.sex, how)Human.doPee = doPee #动态绑定方法lilei.doPee("站着")hanmeimei.doPee("蹲着")# 学习的方法def doLearning(self, learn):print "%s: %s" % (self.name, learn)Human.doLearning = doLearning #动态绑定方法lilei.doLearning("How are you?")lilei.doLearning("I'm fine, thank you!")----------### Go 思想面向对象之于Go,没有继承这么一说,更像是C与Python的结合体,并把鸭子类型发扬到极致。接口(interface)就好比是一只"鸭子",而interface结构体内包裹的方法就是这只"鸭子"所具有的功能,Go中,接口可以描述为: ***具有这些功能的家伙就是这只"鸭子"***方法(func)被定义在结构(类/struct)之外,被绑定于这个结构之上,可以描述为: ***这是它的功能*** ,当一个struct中的一些方法都包含在某个interface中时,我们就说: ***啊哈,这就是那只"鸭子",哪怕它多长了几条腿(func),它也是啊***关于继承,没有,go中虽然内嵌很像继承但不是。继承是一脉相传,而go的内嵌表达出你中有我我中有你的情怀,需要用到某个struct的功能了,那么就对它说 *你就是我的一部分*struct、interface、func 这些几乎就是Go面向对象的全部了,如此简洁。package mainimport ("fmt")// 接口 学生type Student interface {learningEnglish(string)}// 结构type Human struct {Name stringSex  string}// 学习英语方法,绑定于Humanfunc (student Human) learningEnglish(learning string) {fmt.Printf("%s: %s\n", student.Name, learning)}// 结构 男人// go没有继承这个概念,这里是嵌入type Male struct {Human "嵌入字段"}type Female Male// 方法, 绑定到了Human结构func (this Human) Pee(how string) {fmt.Printf("%s %s %s撒尿\n", this.Name, this.Sex, how)}// 学习func doLearning(learning Student, learing string) {learning.learningEnglish(learing)}// Peefunc doPee(human interface {}) {switch sex := human.(type){case Male:sex.Pee("站着")case Female:sex.Pee("蹲着")}}func main() {lilei := Male{}lilei.Name = "李雷"lilei.Sex = "男"fmt.Printf("%s %s 出场\n", lilei.Name, lilei.Sex)hanmeimei := Female{}hanmeimei.Name = "韩梅梅"hanmeimei.Sex = "女"fmt.Printf("%s %s 出场\n", hanmeimei.Name, hanmeimei.Sex)doPee(lilei)doPee(hanmeimei)doLearning(lilei, "How are you?")doLearning(hanmeimei, "I'm fine, thank you!")}----------摆脱C++/Java/Python等思想的桎梏,才能领略Go的魅力---------------------------------

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-58498-1-1.html 上篇帖子: python BDD 框架之lettuce 下篇帖子: VS2013中Python学习笔记[基础入门]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表