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. Linux基础整理-软件的安装与卸载

    redhat/centos/fedora/suse系列: 摘自网址:http://www.runoob.com/linux/linux-yum.html yum( Yellow dog Updater ...

  2. iOS开发工具-网络封包分析工具Charles

    转自唐巧的技术博客:http://blog.devtang.com/blog/2013/12/11/network-tool-charles-intr/ Charles是在Mac下常用的截取网络封包的 ...

  3. git push.default is unset

    warning: push.default is unset; its implicit value is changing inGit 2.0 from 'matching' to 'simple' ...

  4. 在ASP.MVC中使用Ajax

    Asp.net MVC 抛弃了Asp.net WebForm那种高度封装的控件,让我们跟底层的HTML有了更多的亲近.可以更自由.更灵活的去控制HTML的结构.样式和行为.Asp.net MVC可以更 ...

  5. iOS数据库学习(1)-安装Navicat

    1.下载Navicat Premium 11.0.16.dmg 已经放到百度网盘,里面有安装文件和注册机 下载链接: http://pan.baidu.com/s/1sjI64HZ  密码: 2h7q ...

  6. Promise 异步(asynchronous )编程

    概述 Promise.all(iterable) 方法返回一个promise,该promise会等iterable参数内的所有promise都被resolve后被resolve,或以第一个promis ...

  7. 导入excel错误:外部表不是预期的格式 解决方案

    环境:win7+iis7+Office2007 在asp.net网站中导出Excel文件后,再把文件导入到数据库中. 读取Excel文件时,打开连接出错. 错误为:外部表不是预期的格式 解决:检查了一 ...

  8. CF459D Pashmak and Parmida's problem (树状数组)

    Codeforces Round #261 (Div. 2)   题意:给出数组A,定义f(l,r,x)为A[]的下标l到r之间,等于x的元素数.i和j符合f(1,i,a[i])>f(j,n,a ...

  9. PHP获取MAC地址的函数代码

    获取网卡的MAC地址原码;目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址   复制代码 代码如下: <?php /** 获取网卡的MAC地址原码:目前支持WIN/LINUX系统 ...

  10. 自执行的匿名函数!function()

    最近有空可以让我静下心来看看各种代码,function与感叹号的频繁出现,让我回想起2个月前我回杭州最后参加团队会议的时候,@西子剑影抛出的一样的问题:如果在function之前加上感叹号 (!) 会 ...