005.面向对象&接口编程
1 面向函数编程
1.1 将数据作为参数传递到函数入参
1.2 对象与函数是分离的
2 面向对象编程
2.1 使用者看起来函数作为对象的属性而非参数
2.2 函数属于对象
2.3 method是附属在一个给定的类型上的,他的语法和函数的声明语法几乎一样, 只是在func后面增加了一个receiver(也就是method所依从的主体)
2.4 语法
2.4.1 func (r ReceiverType) funcName(parameters) (results)
2.4.2 虽然method的名字一模一样,但是如果接收者不一样,那么method就不一样
2.5 传递方式
2.5.1 值传递
2.5.1.1 普通类型作为Receiver仅仅是以副本作为操作对象,并不对原实例对象发生操作
2.5.2 引用传递
2.5.2.1 指针作为Receiver会对实例对象的内容发生操作
2.6 method继承
2.6.1 通过匿名字段继承 method
2.7 method重写
2.7.1 派生struct可以通过重写method覆盖
3 面向接口编程
3.1 概念
3.1.1 与Java概念一致,定义一组方法的集合
3.1.2 interface可以被任意的对象实现
3.1.3 同理,一个对象可以实现任意多个interface
3.1.4 任意的类型都实现了空interface(我们这样定义:interface{}),也就是包含0个method的interface
3.1.5 interface 变量可以接收 实现了该接口方法的任意对象
3.2 使用
3.2.1 type IntfTest interface定义接口
3.2.2 struct定义对象
3.2.3 使用method实现接口
3.2.4 使用struct继承对象属性,同时也继承了method
3.2.5 可以继续覆盖重写继承的默认method
3.2.6 使用interface变量可以访问任何实现了该接口的对象
3.3 空interface
3.3.1 不包含任何method,所以所有的类都实现了空interface
3.3.2 任何对象都可以赋值给空interface,即可以存储任意类型对象,类似于C语言的 C语言的void*
3.3.3 一个函数把interface{}作为参数,那么他可以接受任意类型的值作为参数
3.3.4 一个函数返回interface{},那么也就可以返回任意类型的值
3.4 interface作为参数
3.4.1 标准库中,fmt.Println的入参就是 ...interface{}
3.4.1.1
3.4.2 该文件中定义了 Stringer 接口,实现了该接口的对象就可以被 fmt.Println格式化输出
3.4.2.1
3.4.3 如果未实现该接口,则按照默认的格式输出,Go默认为所有对象都有该接口的实现,可以直接格式化输出
3.4.4 注意
3.4.4.1 实现了error接口的对象(即实现了Error() string的对象),使用fmt输出时,会调用Error()方法,因此不必再定义String()方法了
3.5 interface变量存储类型判断
3.5.1 使用 value, ok = element.(T) 判断
3.5.2 switch测试
3.5.2.1 switch value := element.(type)
3.5.2.2 element.(type)语法不能在switch外的任何逻辑里面使用, 如果你要在switch外面判断一个类型就必须使用第一种方法
3.6 interface组合
3.6.1 如果一个interface1作为interface2的一个嵌入字段,那么interface2隐式的包含了interface1里面的method
3.6.2 golang源码包示例
3.6.2.1
3.7 反射
3.7.1 golang的反射与Java相比功能弱很多
3.7.2 golang不支持解析string然后执行
3.7.3 golang的反射机制只能存在于已经存在的对象上面
 
 
 

【GoLang】golang 面向对象编程 & 面向接口编程的更多相关文章

  1. javascript设计模式学习之十七——程序设计原则与面向接口编程

    一.编程设计原则 1)单一职责原则(SRP): 这里的职责是指“引起变化的原因”:单一职责原则体现为:一个对象(方法)只做一件事. 事实上,未必要在任何时候都一成不变地遵守原则,实际开发中,因为种种原 ...

  2. go 学习笔记之万万没想到宠物店竟然催生出面向接口编程?

    到底是要猫还是要狗 在上篇文章中,我们编撰了一则简短的小故事用于讲解了什么是面向对象的继承特性以及 Go 语言是如何实现这种继承语义的,这一节我们将继续探讨新的场景,希望能顺便讲解面向对象的接口概念. ...

  3. Python 中的面向接口编程

    前言 "面向接口编程"写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重要,甚至几乎所有的编程语言都需要,毕竟程序具有良好的扩展性.维护性谁都不能拒绝 ...

  4. Java中的面向接口编程

    面向接口编程是很多软件架构设计理论都倡导的编程方式,学习Java自然少不了这一部分,下面是我在学习过程中整理出来的关于如何在Java中实现面向接口编程的知识.分享出来,有不对之处还请大家指正. 接口体 ...

  5. Java面向接口编程,低耦合高内聚的设计哲学

    接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极大的降低程序中各个模块之间的耦合,提高系统的可维护性以及可扩展性. 因此,很多的软件架构设计理念都倡导"面向接口编程"而 ...

  6. java接口,接口的特性,接口实现多态,面向接口编程

    package cn.zy.cellphone; /**接口是一种引用数据类型.使用interface声明接口,形式 * 形式:public interface 接口名称{} * 接口不能拥有构造方法 ...

  7. java面向接口编程

    在oop中有一种设计原则是面向接口编程,面向接口编程有非常多优点,详细百度一大片.我来谈一下详细的使用中的一些不成熟的见解.! 首先面向接口编程能够消除类之间的依赖关系,使得业务仅仅依赖接口. 这样有 ...

  8. 如何用ABP框架快速完成项目(面向项目交付编程面向客户编程篇)(1) - 目录

    昨天发表了<如何用ABP框架快速完成项目 - 自动化测试 - 前端angular e2e protractor>后,大家十分热情,几个小时内就收到了不少问题,包括: 对于ui自动化测试这方 ...

  9. 2018/2/14 设计模式学习笔记(一) 自己实现ArrayList,LinkedList和Iterator,以及在此过程中对于面向对象,面向接口,还有抽象类的一些思考感悟

    因为本人目前为止学习编程不过七个月,所以后面的感悟对于一些大神来说可能嗤之以鼻,但对于一些刚刚入门的萌新来说在理解面向对象的思想上,以及抽象类和接口应该怎么设计等方面应该还是会有所帮助的 首先我们定义 ...

随机推荐

  1. Xcode打印frame id

    开启 打开终端输入三条命令: . touch ~/.lldbinit . echo display @import UIKit >> ~/.lldbinit . echo target s ...

  2. owin要跑起来

    必须安装 Microsoft.Owin.Host.SystemWeb

  3. SSL/TLS加密传输与数字证书解读

    什么是ssl? secure socket layer(ssl)协议最初由netscape企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准 ...

  4. asp.net MVC动态路由

    项目中遇到需要动态生成控制器和视图的. 于是就折腾半天,动态生成控制器文件和视图文件,但是动态生成控制器不编译是没法访问的. 找人研究后,得到要领: 1.放在App_Code文件夹内 2.不要命名空间 ...

  5. [CentOS]安装命令行终端Terminator工具

    摘要 Terminator是一款跨平台的终端工具,使用的是 GPL 许可证,提供了很多高级的功能.它没有 Guake 和 Yakuake 那样光鲜,但绝对是一款重型武器.它提供的功能包括界面分块,将自 ...

  6. javascript DOM操作之 querySelector,querySelectorAll

    javascript DOM操作之 querySelector,querySelectorAll

  7. 妈咪,我找到了! -- 15个实用的Linux find命令示例

    妈咪,我找到了! -- 15个实用的Linux find命令示例 英文原文:Mommy, I found it! — 15 Practical Linux Find Command Examples ...

  8. unzip 命令使用

    http://blog.sina.com.cn/s/blog_6c9d65a10100nzqf.html unzip命令:解压缩文件 他是解压zip压缩的文件,和zip互逆的一对工具.   命令: u ...

  9. Pattern Recognition and Machine Learning (preface translation)

    前言 鉴于机器学习产生自计算机科学,模式识别却起源于工程学.然而,这些活动能被看做同一个领域的两个方面,并且他们同时在这过去的十年间经历了本质上的发展.特别是,当图像模型已经作为一个用来描述和应用概率 ...

  10. iframe框架嵌套技巧(全屏,去双滚动条)

    一般情况下我们很少用到iframe(框架),但有些特殊的情况下我们不得不使用iframe,那么或许或遇到嵌套内容不全屏,网页周围有边框,双滚动条等等情况,下面来说一下处理技巧. 全屏与边框处理: &l ...