Skip to content

Commit 41f6f85

Browse files
committed
🐔鸡你太美
1 parent 0052457 commit 41f6f85

File tree

3 files changed

+151
-1
lines changed

3 files changed

+151
-1
lines changed

10.方法Method.md

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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+
}

8.函数Function.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## 函数 Function
1+
## 函数Function
22
-Go 函数**不支持** 嵌套,重载 和 默认函数
33
-但支持一下特性:
44
    无需声明原型,不定长度变参,多返回值,命名返回值参数,匿名函数,闭包

9.结构Struct.md

+124
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
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+
}

0 commit comments

Comments
 (0)