go语言学习笔记(第3章)—面向对象编程

mickelfeng · · 1394 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

一个典型的类型系统包括:
  • 基础类型: byte, int, bool, float等
  • 复合类型:数组,结构体,指针
  • 可以指向任意对象的类型(Any类型)
  • 值语义和引用语义
  • 面向对象,即所有具备面向对象特征的类型
  • 接口
在GO语言中可以为任意类型(包括内置类型)添加相应的方法
go语言学习笔记(第3章)—面向对象编程
上面的例子中我们定义了一个新类型 Integer ,Integer和int没有本质区别,只是为内置的int增加了一个方法Less(),可以让整型像一个普通的类一样使用了。

在GO语言中没有隐藏的this指针
1) 方法施加的目标显示传递,没有被隐藏起来
2) 方法施加的目标不需要非得是指针,也不用非得叫this

GO语言和C语言一样,类型都是基于值传递的,要想改变变量的值,只能在函数中传递指针。

1. 类型系统

1.1.  值语义和引用语义
值语义和引用语义的差别在于赋值
b = a
b.Modify()

如果b的修改不会影响a的值,那么此类型属于值类型。如果会影响a的值,那么此类型是引用类型。

GO语言中的大多数类型都属于值语义,包括:
基本类型: byte, int, bool, float32, float64和string等
复合类型: array, struct, pointer等

GO语言中的类型的值语义表现的非常彻底。

1.2. 结构体
GO语言放弃了包括继承在内的大量面向对象特性,只保留了组合这个最基础的特性。

组合不能算面向对象的特性,因为在C语言这样的过程式编程语言中,也有结构体,也有组合。组合只是形式复合类型的基础。

GO语言中结构体的使用方式与C语言并没有什么明显的不同。

2. 初始化
在GO语言中,未进行显式初始化的变量都会被初始化为该类型的零值,例如bool类型的零值为false, int类型的零值为0, string类型的零值为空字符串。

结构体有多种初始方法,如下:

go语言学习笔记(第3章)—面向对象编程
3. 匿名组合
确切的说,GO语言也提供了继承,但是采用了组合的文法,所以我们将其称为匿名组合

4. 可见性
GO语言对关键字的增加非常吝啬,没有private, protected, public这样的关键字。要使某个符号对其他包可见,需要将该符号定义为以大写字母开头。

5. 接口
GO语言的接口并不是其他语言中所提供的接口概念。JAVA现在的接口是侵入式接口, GO的接口时非侵入式的。

在GO语言中,一个类只要实现了接口要求的所有函数,我们就说这个类实现了该接口。

在GO语言中,接口赋值在GO语言中分为如下两种情况:
1. 将对象实例赋值给接口
2. 将一个接口赋值给另一个接口

有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:mickelfeng

查看原文:go语言学习笔记(第3章)—面向对象编程

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1394 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传