go语言中,虽然没有明确提出面向对象的概念,但是基于已有的语法设计,我们也可以写出面向对象的代码。go语言中的面向对象是借助struct结构体实现的。值得一提的是,go语言中虽然没有class关键字来表示类,但却有interface来表示接口。

回顾结构体

type Person struct {name stringage int
}person := Person{"mike",18}
fmt.Println(person)

以上代码用结构体类型表示了一个人,用面向对象的思维来理解,nameage是两个成员变量。那么,我们就应该思考,如何编写成员方法呢?

go语言是这样设计的:

func (person *Person) showInfo() {fmt.Printf("My name is %s , age is %d ",person.name,person.age)
}func (person *Person) setAge(age int) {person.age = age
}person := Person{"mike",18}
person.showInfo()
person.setAge(20)
fmt,Println(person)

在关键字func和函数名之间加上一对小括号,写上与之关联的结构体类型的指针类型和变量名,推荐写成指针类型的原因是,函数传递的形参不是指针类型的话,无法覆盖实参。

实际上,此时,showInfo(),setAge()就可以叫做成员方法了

继承

其他面向对象的语言,是使用extends关键字来表示继承的,而go语言中继承的设计非常简单,不需要额外的关键字。

type Student struct {Personid intscore int
}func (student *Student) showInfo() {fmt.Println("I am a student ...")
}func (student *Student) read() {fmt.Println("read book ...")
}student := Student{Person{"jake",16},1001,99}
student.showInfo()
student.setAge(22)
student.read()

可以看到,在学生结构体中,我们使用到了Person作为匿名变量,意思就是,Student继承自Person。我们除了继承了成员变量和成员方法之外,还可以为学生结构体增加成员方法,重写成员方法。

多态

package mainimport "fmt"type Human interface {speak(language string)
}type Chinese struct {}type American struct {}func (ch Chinese) speak(language string ) {fmt.Printf("speck %s\n",language)
}func (am American ) speak(language string ) {fmt.Printf("speck %s\n",language)
}func main() {var ch Humanvar am Humanch = Chinese{}am = American{}ch.speak("Chinese")am.speak("English")
}

面向接口编程,结构体中只要有和接口中定义的同名方法,就称该结构体是实现了哪个接口。

golang 面向对象编程相关推荐

  1. 第十章 Golang面向对象编程(上)

    结构体 看一个养猫问题 张老太养了两只猫猫:一只名字叫小白,今年3岁,白色.还有一只叫小花,今年100岁,花色.请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色.如果用户输入的小猫 ...

  2. 【Golang面向对象编程-第一节】

    文章目录 1. GO语言OOP概述 2. 封装的实现 封装的实现 3. 继承的实现 4. 多态的实现 4.1 接口概述 4.2 声明接口 4.3 实现接口 4.4 接口嵌套 4.5 类型断言的格式 G ...

  3. 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态

    介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...

  4. go 面向对象编程-1

    结构体 一个程序就是一个世界,有很多对象(变量) golang语言面向对象编程说明 golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.所以说golan ...

  5. Golang笔记—面向对象编程

    工厂模式 说明 Golang 的结构体没有构造函数,通常可以使用工厂模式来解决这个问题. 看一个需求 一个结构体的声明是这样的: package model type Student struct { ...

  6. golang中的面向对象编程之一

    1.golang中面向对象编程说明 2.结构体与结构体变量(实例/对象)的关系示意图 2.1.定义一个Cat结构体体验一把 //定义一个cat结构体,将cat的特性作为字段属性,放到结构体中 type ...

  7. Golang笔记-面向对象编程-多态/类型断言

    面向对象编程-多态 基本介绍 变量(实例)具有多种形态.面向对象的第三大特征,在 Go 语言,多态特征是通过接口实现的.可 以按照统一的接口来调用不同的实现.这时接口变量就呈现不同的形态. 快速入门 ...

  8. Scala进阶之路-面向对象编程之类的成员详解

    Scala进阶之路-面向对象编程之类的成员详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Scala中的object对象及apply方法 1>.scala 单例对象 ...

  9. golang面向对象思想和实现

    golang中并没有明确的面向对象的说法,实在要扯上的话,可以将struct比作其它语言中的class. 类声明 type Poem struct {Title stringAuthor string ...

最新文章

  1. java.vm.info_深入理解java虚拟机
  2. 深度学习 dns tunnel检测 使用统计特征 全连接网络——精度99.8%
  3. 从一个实例看javascript几种常用格式的转换
  4. no typehandler found for property XXXX 解决
  5. 命令行下 pdb 调试 Python 程序
  6. 中国电子银行网-互联网金融第一大网站
  7. 【渝粤教育】21秋期末考试网络市场调查与预测10143k2
  8. app上显示服务器数据加载失败,APP中的6种常见数据加载
  9. lgg7刷机包下载_LG G7ThinQ刷机包
  10. hotnets 2019 Using ground relays for low-latency wide-area routing in megaconstellations 阅读报告
  11. 软件工程-第三章-需求分析
  12. TM1640驱动程序
  13. Android studio打开机智云APP(自动生成)
  14. access字段属性设置下拉列表_CAD常用命令:ATTDEF(定义属性)
  15. mac插网线不能上网_我的Macbook插上网线为什么不能上网? – 手机爱问
  16. 查看计算机温度指令,如何查看电脑CPU的温度?查看CPU温度的两种方法
  17. 天耀18期 – 6.面向对象-类和对象【作业】.
  18. Web设计中最常用的10种色调以及示例演示
  19. hdu 1998 奇数阶魔方 规律
  20. 小何讲进程: 编写Linux守护进程方法详解

热门文章

  1. 如何理解写文档这件事情 ?
  2. CMakeLists.txt
  3. [na]tcpdump非常实用的抓包实例
  4. kafka滞销瓶颈解决方案
  5. 拥抱RxJava(番外篇):关于RxJava的Tips Tricks
  6. eclipse中编辑properties文件无法看到中文
  7. Jquery Ajax调用aspx页面方法
  8. oracle性能调优学习0622
  9. 决心开始写博,坚持!
  10. tomcat 编译版本