前言
编程就是要通过编程语言表达给计算机,让计算机帮助我们达到解决现实生活问题的目的!
不管是Python还是Golang...这些编程语言,由于历史原因、遇到的痛点、解决的问题不同,导致语法追求、本身特性不同。但是遇到的问题、解决问题的思想是一致的。
面向对象编程 :就是按照自己的理解 尽量把程序里出现的所有东西 抽象得划分为1个个的不同的分类,这些分类中包含自身独有的数据、也有自己独特的方法!
如果想要开发1款游戏,游戏中的人物不仅有角色属性、也有交易、攻击这些作为。
单纯得使用数据类型int、string ..函数去表示1个人物,复杂不利于代码灵活、扩展,于是想办法如何把数据和方法集合到1块进行表示。
Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。
Go语言中通过结构体的内嵌再配合接口 比面向对象具有更高的扩展性和灵活性。
结构体:就是可以把多种不同的基本数据类型,封装到1个整体里面。在golang中这个整体称为结构体。
自定义类型
自定义类型可以对Go中现有的数据类型的方法进行扩展
在Go语言中我们无法直接对在其他包中定义的结构体添加方法,但是可以通过类型别名的方式迂回到达目的。
类型别名
结构体声明
structure结构:顾名思义肯定是由不同的东西组合而成。
在我们写代码的时候如果 需要定义1个由多个基本数据类型组成的数据类型时(例如人有性别string、年龄uint8、爱好得有多个[]string、吃、喝、拉、撒、睡、学习、工作func)创造这种具有多维度的属性时的物时,无法使用单一的数据类型表示全面,所有我们只能使用结构体。
结构体的语法
typestruct
定义1个简单的结构体
匿名结构体
在Go语言中如果我们一次性使用结构体的话, 还可以定义 匿名的结构体。
方式2
创建指针类型结构体
Go中的结构体不同于Python的class,它是值类型不可以被修改要修改可以用指针,所以Python里面没有指针,使用copy、 deep copy。
通过指针创建1个可以字段可以被修改的结构体
结构体初始化
Go中结构体初始化的方式很多主要有变量赋值、构造函数初始化2种方式,于Python不同的是go中没有自带构造方法,需要自己构建。
实例化
构造函数初始化结构体
构造函数 就是1个构造X种结构体变量的函数,其用意是通过 1个函数反复生成某种结构体的变量,提升代码的重用性。
使用变量初始化结构体的方式会造成代码的冗余,我么可以使用一个构造函数来完成struct的初始化。
struct的构造函数约定俗成以 new开头,自定义1个构造函数可以返回1个值类型的struct, 如果1个struct内部字段存储的数据量很大,重复copy造成内存开销过大。也可以返回1个指针类型的struct。
匿名字段struct
模拟继承
利用Go的struct可以嵌套struct,当前struct中没有的字段 自动去嵌套了struct的匿名字段中查找的特性,实现继承的效果。
结构体内存布局
结构体占用一块连续的内存。
struct的方法和接受者
前面的struct中我只是封装了数据,那么我想对struct中的这些数据进行操作呢?就需要给struct绑定上1个方法。
方法(Method)
接收者(Receiver)thisself
Go里面接收者(某1个数据类型)+方法 这套语法,实现了类似于Python类中的方法!
方法和函数的不同是函数不从属于任何数据类型,而方法作用于某种数据类型。
语法
原来Go的函数名前面还可以指定接收者
值类型的接受者
接受者必须指定某1个数据类型
指针类型的接受者
接受者还可以为 某种数据类型的指针,接受者为数据类型指针时就实现了对struct 字段的修改。
任意类型添加方法
int32
结构体序列化
"":,
序列化和反序列化
复杂json结构
在golang中我们不仅可以把json转换成结构体,还可以把json转换成map类型。
结构体实现链表
链表反转
练习
员工管理函数版
员工管理面向对象版
manage_unit.go
main.go