Fork me on GitHub

Golang之旅34-struct3

golang面向对象编程

  1. Golang也是支持对象编程OOPGolang支持面向对象编程特性
  2. Golang没有类class通过结构体来实现面向对象编程
  3. Golang的面向对象编程非常简单,没有继承、方法重载、构造函数和析构函数等;Golang的继承是通过匿名字段来实现
  4. Golang是面向对象接口编程的,耦合性低

结构体demo

  • 一类事物的特性提取出来(比如猫类),形成一个新的数据类型,就是一个结构体
  • 通过结构体来创建多个变量(实例对象)
  • 事物可以是Cat,Person,Fish等不同的类
  • 通过typestruct来进行定义
  • 结构体是值类型,默认是值拷贝
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main
import "fmt"

// 创建一个 Cat 结构体:将猫的各种信息放入Cat结构体中进行管理
type Cat struct{
Name string
Age int
Color string
}

func main(){
// 创建一个 Cat 的变量实例
var cat1 Cat // var a int
cat1.Name = "小白"
cat1.Age = 18
cat1.Color = "白色"
fmt.Println("cat1=", cat1)

// 猫的信息
fmt.Println("name=", cat1.Name)
fmt.Println("age=", cat1.Age)
fmt.Println("color=", cat1.Color)
}

总结

  • 结构体是自定义的数据类型,代表的是一类事物
  • 结构体变量(实例)是具体的,实际的,代表的是一个具体变量

结构体声明

  • 字段声明的语法同变量是一样的
  • 字段的类型可以是:基本类型、数组或者引用类型
  • 创建一个结构体变量后,如果么有给字段赋值,对应为零值
    • 布尔对应为false
    • 数值是0
    • 字符串是“”
    • 指针、切片和map 的零值都是nil,还没分配空间,需要用make进行初始化
  • 不同结构体变量的字段是相互独立的,互不影响;一个字段的修改不会影响到另一个
1
2
3
4
5
6
7
8
9
10
11
12
13
// 声明结构体

type 结构体名称 struct{
field1 type
field2 type
}

// 栗子
type Student struct{ // 定义了一个Student结构体,大写表示能外部引用
Name string // 定义3个字段或属性
Age int
Score float32
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package main
import "fmt"

type Person struct{
Name string
Age int
Scores [5]float64 // 数组类型
ptr *int // 指针
slice []int // 切片
map1 map[string]string // map
}

type Monster struct{
Name string
Age int
}

// 指针、切片和map 的零值都是nil,还没分配空间,需要用make进行初始化

func main(){
// 定义结构体变量
var p1 Person
if p1.ptr == nil{ // 3个都是 nil;还没有进行初始化
fmt.Println("ok1")
}
if p1.slice == nil{
fmt.Println("ok2")
}
if p1.map1 == nil{
fmt.Println("ok3")
}

// 使用slice:初始化再使用
p1.slice = make([]int, 10)
p1.slice[0] = 100

// 使用map:先初始化
p1.map1 = make(map[string]string)
p1.map1["key1"] = "tom"
fmt.Println(p1)

var monster1 Monster
monster1.Name = "小红"
monster1.Age = 28

monster2 := monster1
monster2.Age = 20

// 结构体是值类型,默认是值拷贝
fmt.Println("monster1", monster1) // 28
fmt.Println("monster2", monster2) // 20
}

本文标题:Golang之旅34-struct3

发布时间:2019年11月15日 - 00:11

原始链接:http://www.renpeter.cn/2019/11/15/Golang%E4%B9%8B%E6%97%8534-struct3.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Coffee or Tea