编程语言学习大纲

学习一门编程语言大概需要学习以下的这些知识点, 当然, 不同语言有不同的特点, 会有一些差异.

git 仓库

变量

变量相当于指定一段内存空间, 这段空间里的值就是变量的值, 而变量的类型规定了这段空间的大小

go定义变量有多种方式

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
package main

import "fmt"

// 全局变量
var a int = 1

func main() {
// 不指定类型
var variable1 = 100
var variable2 = "Golang"
var variable3 = 750.345

// 不赋初始值 (此时值为默认值)
var variable4 int
var variable5 string
var variable6 float64

// 赋值
variable4 = 300

// 同时给多个同类型的变量赋值
var variable7, variable8, variable9 int = 1, 2, 3

// 同时给多个不同类型的变量赋值
var variable10, variable11, variable12 = 1, "Golang", 3.14

// 短变量声明+初始化, 会自动推导类型
variable13 := 100
variable14 := "Golang"
variable15 := 3.14

// 同时给多个同类型的变量赋值
var1, var2, var3 := 100, 200, 300

// 同时给多个不同类型的变量赋值
var4, var5, var6 := 300, "Golang", 3.14

// golang中定义的变量必须使用, 否则会报错
fmt.Println(
variable1, variable2, variable3, variable4, variable5, variable6, variable7,
variable8, variable9, variable10, variable11, variable12,
variable13, variable14, variable15,
var1, var2, var3, var4, var5, var6,
)
}

流程控制

流程控制有顺序, 条件和循环, 可以处理更多复杂逻辑

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
53
54
55
56
57
58
59
60
61
package main

import "fmt"

func main() {
a := 100
b := 100
// 条件判断

// if - else if - else
if a > b {
fmt.Println("a>b")
} else if a == b {
fmt.Println("a=b")
} else {
fmt.Println("a<b")
}

// switch 判断多个
switch a {
case 100:
fmt.Println("100")
case 200:
fmt.Println("200")
case 300:
fmt.Println("300")
default:
// 如果上面的都不匹配, 就执行default
fmt.Println("???")
}

// 循环
// 定义i为0, 循环条件是i<5, 每次循环i+1
for i := 0; i < 5; i++ {
// 循环五次
fmt.Println(i)
}

// 运行看看和上一个的不同之处
for i := 0; i < 5; i++ {
if i == 1 {
fmt.Println("跳出当前这次循环, 但是不打断")
continue
}
if i == 3 {
fmt.Println("跳出循环, 打断循环")
break
}
fmt.Println(i)
}

// 另一种
i := 1

for i < 5 {

fmt.Println(i)

i++
}
}

数据结构

数组

定义数组变量, 其实是定义一个指向一个内存地址的指针, 指针后面的连续空间用来存放数组的值

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
package main

import "fmt"

func main() {
// 定义数组
var arr1 [3]string
//arr2 := [3]string{"a", "b", "c"}
arr2 := []string{"a", "b", "c"}
arr3 := [...]int{10, 20, 30, 40, 50}
// 1和3的位置赋值, 其他位置为默认值
arr4 := [5]int{1: 10, 3: 30}

fmt.Println(arr1, arr2, arr3, arr4)

// 选取数组中的某段
fmt.Println(arr3[:]) // 全部
fmt.Println(arr3[1:3]) // 从1到2, 不包含3
fmt.Println(arr3[:3]) // 从0到2, 不包含3

// 数组循环
i := 0
for range arr3 {
fmt.Println(arr3[i])
i++
}
// i为当前索引, v接收arr中当前的值
for i, v := range arr3 {
// i是索引, v是值
fmt.Println(i, v)
}
// 如果不需要, 可以用_代替赋值
for _, v := range arr3 {
// i是索引, v是值
fmt.Println(v)
}

// 复制数组
arr5 := arr3 // 复制了值, 改变arr5, 不会改变arr3
arr6 := &arr3 // 复制了指针 (地址), 改变arr6, 也会影响arr3

arr5[1] = 50
fmt.Println(arr5, arr3)
arr6[1] = 60
fmt.Println(arr6, arr3)
// arr6打印出来是&, 也就是指针的形式, 如何获取指针对应的值? -> *
fmt.Println(*arr6)
}

内置库

多线程

框架


本站总访问量