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. HTTP1.0与HTTP1.1的区别

    HTTP/1.1与HTTP/1.0的区别 下面主要从几个不同的方面介绍HTTP/1.0与HTTP/1.1之间的差别,当然,更多的内容是放在解释这种差异背后的机制上. 1 可扩展性 可扩展性的一个重要原 ...

  2. javascript DOM操作之 querySelector,querySelectorAll

    javascript DOM操作之 querySelector,querySelectorAll

  3. vim中添加molokai.vim 配色安装

    无意中发现知乎中讨论的话题: 你认为最好看的 Vim 配色方案(color scheme)是哪款? 网友回答 排在第一位的是:molokai 啊,最经典的配色 既然molokai这么经典,当然要用了. ...

  4. 整理的mysql优化内容

    1,当只要一行数据时使用 LIMIT 1如果明确只取一条数据,要加上limit 1; 2,避免 SELECT *,根据需要获取字段应该养成一个需要什么就取什么的好的习惯. 3,使用 ENUM 而不是 ...

  5. .ssh/config简单使用

    转自:http://blog.lizhigang.net/archives/265 .ssh/config简单使用 需求:  工作的电脑经常会存储不同的key,并且使用不同的用户登录linux系统.如 ...

  6. GOF业务场景的设计模式-----工厂模式

    定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 工厂方法模式 基本代码 interface IProduct { public void produ ...

  7. app的meta

    <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> < ...

  8. 2015年11月30日 spring初级知识讲解(一)装配Bean

    序,Spring的依赖注入是学习spring的基础.IOC为控制反转,意思是需要的时候就由spring生成一个,而不是先生成再使用. 写在前面 Spring提供面向接口编程,面向接口编程与依赖注入协作 ...

  9. Junit初级编码(一)第一个Junit测试程序

    序,Junit测试是单元测试的一个框架,提供了很多方法,供我们快速开展单元测试.目前最新版本JAR包为4.12,官网地址为http://junit.org/ 一.第一个Junit测试程序 1 去官网下 ...

  10. phpmyadmin中访问时出现2002 无法登录 MySQL 服务器

    phpmyadmin中访问时出现2002 无法登录 MySQL 服务器! 解决方法如下: 修改phpmyadmin目录中libraries文件夹下的config.default.php文件 $cfg[ ...