11【保姆级】-GO语言的struct

11【保姆级】-GO语言的struct

  • 一、Go的面向对象
    • 1.1 说明
  • 二、结构体
    • 2.1 结构体和结构体变量(实例)的区别和联系
    • 2.2 声明结构体 和 细节说明
    • 2.3 结构体在内存中的布局
    • 2.4 创建结构体和访问结构体的四种方式

在学习GO语言时:

  1. 先建立整体框架,然后再去抠细节。
  2. 先Know how,然后know why。
  3. 先做出来,然后再去一点点研究,才会事半功倍。
  4. 适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。
  5. 对于GO语言,切记遵守语法格式规则。(例如python语言、例如SpringBoot框架等)
    解释:某些知识点,就是很难了解,那么先做出来,然后继续向前学习,可能在某个时间点我们就会恍然大悟。

一、Go的面向对象

1.1 说明

  1. Golang 也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说 Golang 支持面向对象编程特性是比较准确的。
  2. Golang 没有类(class),Go 语言的结构体(struct)和其它编程语言的类(class)有同等的地位,在Golang中的面向对象 是基于 struct 来实现 OOP 特性的。
  3. Golang 面向对象编程非常简洁,去掉了传统 OOP 语言的继承、方法重载、构造函数和析构函数、隐藏的 this 指针等等
  4. Golang 仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它 OOP 语言不样,比如继承 : Golang 没有 extends 关键字,继承是通过匿名字段来实现。
  5. Golang 面向对象(OOP)很优雅,OOP 本身就是语言类型系统(type system)的一部分,通过接口(interface)关联,耦合性低,也非常灵活。后面同学们会充分体会到这个特点。也就是说在 Golang 中面向接口编程是非常重要的特性。

二、结构体

2.1 结构体和结构体变量(实例)的区别和联系

  1. 结构体是自定义的数据类型(数据类型例如:int、string),代表一类事物
  2. 结构体变量(实例)是具体的,实际的,代表一个具体变量
type Cat struct {
	name string
	age  int
}

func main() {

	var catVar Cat
	catVar.name = "小白猫"
	catVar.age = 1
	fmt.Println(catVar)                 	 // {小白猫 1}
	fmt.Println("catName:", catVar.name) // catName: 小白猫
	fmt.Println("catAge:", catVar.age)   // catAge: 1
}

2.2 声明结构体 和 细节说明

11【保姆级】-GO语言的struct_第1张图片

  1. 从概念或叫法上看: 结构体字段 = 属性 = feld
  2. 字段是结构体的一个组成部分,一般是基本数据类型、数组,也可是引用类型。
  3. 字段声明语法同变量,示例: 字段名 字段类型
  4. 字段的类型可以为: 基本类型、数组或引用类型
  5. 在创建一个结构体变量后,如果没有给字段赋值,都对应一个零值(默认值),规则:
    • 布尔类型是 false ,数值是 0 ,字符串是"
    • 数组类型的默认值和它的元素类型相关,比如 score [3 int 则为[0,0,0]
    • 指针 slice,和 map 的零值都是 nil ,即还没有分配空间
  6. 不同结构体变量的字段是独立,互不影响,一个结构体变量字段的更改,不影响另外一个,结构体
    是值类型。

2.3 结构体在内存中的布局

11【保姆级】-GO语言的struct_第2张图片

2.4 创建结构体和访问结构体的四种方式

直接访问

var 变量名 结构体名
var MyCat Cat 

方式二:

var 变量名 结构体名 = 结构体名{}
var MyCat Cat = Cat{} 

方式三:

var 变量名 *结构体名 = new(结构体名)
var MyCat *Cat  = new (Cat) 

方式四:

var 变量名 *结构体名 = &结构体名{}
var MyCat *Cat  =&Cat{}
  1. 第 3 种和第 4 种方式返回的是 结构体指针
  2. 结构体指针访问字段的标准方式应该是:(*结构体指针).字段名 ,比如(*person).Name =“tom”
  3. 但 go 做了一个简化,也支持 结构体指针.字段名,比如 person.Name =“tom”。更加符合程序员使用的习惯,go 编译器底层 对 person.Name 做了转化 (*person).Name。

你可能感兴趣的:(golang,开发语言,后端)