File tree 3 files changed +151
-1
lines changed
3 files changed +151
-1
lines changed Original file line number Diff line number Diff line change
1
+ ## 方法Method
2
+ -Go 中虽没有 ` class ` ,但依旧有 ` method `
3
+ -通过显示说明 ` receiver ` 来实现与某个类型的组合
4
+ -只能为同一个包中的类型定义方法
5
+ -` receiver ` 可以时类型的值或者指针
6
+ -不存在方法重载
7
+ -可以使用值或指针来调用方法,编译器会字段完成转换
8
+ -从某种意义上来说,方法是函数的语法糖,因为 ` receiver ` 其实就是方法所接受的第一个参数 ( ` Method Value vs.Method Expression ` )
9
+ -如果外部结构和嵌入结构存在同名方法,则优先调用外部结构的方法
10
+ -类型别名不会拥有底层类型所附带的方法
11
+ -方法可以调用结构中的非公开字段
12
+
13
+ //课后习题
14
+ type TZ int
15
+
16
+ func main() {
17
+ //零值 0
18
+ var a TZ
19
+ a.Increase(100)
20
+ fmt.Println(a)
21
+ }
22
+
23
+ func (tz *TZ) Increase(num int) {
24
+ //对 int 强制类型转换为 TZ
25
+ *tz += TZ(num)
26
+ }
Original file line number Diff line number Diff line change 1
- ## 函数 Function
1
+ ## 函数Function
2
2
-Go 函数** 不支持** 嵌套,重载 和 默认函数
3
3
-但支持一下特性:
4
4
  ;  ;  ;  ; 无需声明原型,不定长度变参,多返回值,命名返回值参数,匿名函数,闭包
Original file line number Diff line number Diff line change
1
+ ## 结构Struct
2
+ -Go 中的 ` struct ` 与 C 中的 ` struct ` 非常相似,并且 Go 没有 ` class `
3
+ -使用 ` type <Name> struct{} ` 定义结构,名称遵循可见性规则
4
+ -支持指向自身的指针类型成员
5
+ -支持匿名结构,可用作成员或定义成员变量
6
+ -匿名结构也可以用作 ` map ` 的值
7
+ -可以使用字面值对结构进行初始化
8
+ -允许直接通过指针来读写结构成员
9
+ -相同类型的成员可以进行拷贝赋值
10
+ -支持 ` == ` 与 ` != ` 比较运算符,但不支持 ` > ` 或 ` < `
11
+ -支持匿名字段,本质上是定义了以某个类型名为名称的字段
12
+ -嵌入结构作为匿名字段看起来像继承,但不是继承
13
+ -可以使用匿名字段指针
14
+
15
+ type person struct{
16
+ Name string
17
+ Age int
18
+ }
19
+
20
+ func main() {
21
+ //字母值初始化
22
+ a := person{
23
+ Name:"joe",
24
+ }
25
+ //赋值
26
+ a.Age = 19
27
+ fmt.Println(a)
28
+ }
29
+
30
+ 通过指针操作
31
+
32
+ type person struct{
33
+ Name string
34
+ Age int
35
+ }
36
+
37
+ func main() {
38
+ a := &person{
39
+ Name: "joe",
40
+ Age: 19,
41
+ }
42
+ a.Age = 13
43
+ fmt.Println(*a)
44
+ }
45
+
46
+ 匿名结构
47
+
48
+ func main() {
49
+ a := struct{
50
+ Name string
51
+ Age int
52
+ }{
53
+ Name: "joe",
54
+ Age: 19,
55
+ }
56
+ a.Age = 13
57
+ fmt.Println(a)
58
+ }
59
+
60
+ 匿名结构嵌套
61
+
62
+ type person struct {
63
+ Name string
64
+ Age int
65
+ Contact struct {
66
+ Phone, City string
67
+ }
68
+ }
69
+
70
+ func main() {
71
+ a := person{
72
+ Name: "joe",
73
+ Age: 19,
74
+ }
75
+ a.Contact.Phone = "18826996633"
76
+ a.Contact.City = "beijing"
77
+ fmt.Println(a)
78
+ }
79
+
80
+ 匿名字段
81
+
82
+ type person struct {
83
+ string
84
+ int
85
+ }
86
+
87
+ func main() {
88
+ //按照结构体中类型顺序赋值
89
+ a := person{"joe",19}
90
+ fmt.Println(a)
91
+ }
92
+
93
+ 拷贝赋值
94
+
95
+ type person struct {
96
+ string
97
+ int
98
+ }
99
+
100
+ func main() {
101
+ a := person{"joe",19}
102
+ var b person
103
+ b = a
104
+ fmt.Println(b)
105
+ }
106
+
107
+ 结构体嵌入
108
+
109
+ type human struct {
110
+ Sex int
111
+ }
112
+
113
+ type teacher struct {
114
+ human //此处 humen 是于匿名结构,相对与 humen humen
115
+ Name string
116
+ Age int
117
+ }
118
+
119
+ func main() {
120
+ a := teacher{human: human{Sex:0},Name:"joe",Age:19}
121
+ //Go 将 Sex 默认放到最外层,使 a 可直接调用
122
+ a.Sex = 100
123
+ fmt.Println(a)
124
+ }
You can’t perform that action at this time.
0 commit comments