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. CentOS安装oracle12C

    安装虚拟系统CentOS6.5,分配给至少1G的内存,其他条件适当高些,具体参考官方文档 一.安装数据库: 1.安装依赖软件包 yum install binutils -y yum install ...

  2. IIS7/IIS7.5中目录执行权限的设置方法

    我们在建站的时候,通常有些目录必须给写入权限,这个时候这些目录就很可能被人写入脚本文件,为了将安全性维护得更好,我们可以关闭这些有写入权限的目录的脚本执行权限.IIS6的时候,我们很容易找到关闭的地方 ...

  3. yii2 数据库操作(转)

    开始使用数据库首先需要配置数据库连接组件,通过添加 db 组件到应用配置实现("基础的" Web 应用是 config/web.php),DSN( Data Source Name ...

  4. ASP.NET Web API与Owin OAuth:调用与用户相关的Web API(非第三方登录)

    授权完成添加属性 ClaimsIdentity oAuthIdentity = await CreateAsync(user/*userManager*/, OAuthDefaults.Authent ...

  5. 我也来写:数据库访问类DBHelper(转)

    一.前言 相信许多人都百度过:“.net 数据库访问类”.然后就出来一大堆SqlHelper.我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以 ...

  6. mysql 导入sql文件,source命令

    转自:http://blog.sina.com.cn/s/blog_610997850100mwv8.html 今天碰到个问题要用phpmyadmin导入1G的数据,但是在怎么都导入不了,用命令行就可 ...

  7. php 快速排序法

    function quicksort(array $arr = array()){ $len = count($arr); if ($len > 1) { $key = $arr[0]; $l_ ...

  8. 【AngularJS】—— 4 表达式

    前面了解了AngularJS的基本用法,这里就跟着PDF一起学习下表达式的相关内容. 在AngularJS中的表达式,与js中并不完全相同. 首先它的表达式要放在{{}}才能使用,其次相对于javas ...

  9. 微信公众平台开放JS-SDK(微信内网页开发工具包)

    微信公众平台开放JS-SDK(微信内网页开发工具包),这次开放接口是质的飞跃,是对开发者和广大用户一个利好的消息.未来的公众号图文消息会更丰富多彩,准备脑洞大开吧!(第三方平台正式支持接入微信公众平台 ...

  10. 天翼宽带政企网关B2-1P 如何获得超级管理员账号?

    RT 用useradmin没办法做NAT,想进telecomadmin里面看看,,,,,并且已经使用过nE7jA%5m这个密码登录,没有用! 求办法!!! 最佳答案 查找超级管理员密码方法: 1.用光 ...