diff --git a/blog/golang/golang-array.md b/blog/golang/golang-array.md new file mode 100644 index 0000000000000000000000000000000000000000..6eb148fbbbf31c96de7ed93cdbe1ead4bc107402 --- /dev/null +++ b/blog/golang/golang-array.md @@ -0,0 +1,177 @@ +# 第十二章 Golang 数组 + +数组:相同数据类型的一组数据的集合 + +- 数组长度不能修改 +- 数组可以通过下标(索引)访问元素 +- 数组默认初始化为零值 + +## 定义 + +```go +var variable_name [SIZE] variable_type +``` + +示例 + +```go +package main + +import "fmt" + +func main() { + var arr1 [2]string + var arr2 [3]int + + fmt.Printf("arr1: %v\n", arr1) // arr1: [ ] + fmt.Printf("arr1: %T\n", arr1) // arr1: [2]string + + fmt.Printf("arr2: %v\n", arr2) // arr2: [0 0 0] + fmt.Printf("arr2: %T\n", arr2) // arr2: [3]int + +} + +``` + +## 初始化 + +示例 + +```go +package main + +import "fmt" + +func main() { + var arr1 = [2]string{"Tom", "Jack"} + var arr2 = [3]int{1, 2, 3} + var arr3 = [2]bool{true, false} + + fmt.Printf("arr1: %v\n", arr1) + // arr1: [Tom Jack] + + fmt.Printf("arr2: %v\n", arr2) + // arr2: [1 2 3] + + fmt.Printf("arr3: %v\n", arr3) + // arr3: [true false] +} + +``` + +可以省略长度 + +```go +var arr1 = [...]int{1, 2, 3} + +// 等价于 +// var arr1 = [3]int{1, 2, 3} + +fmt.Printf("len: %v\n", len(arr1)) +// len: 3 +``` + +指定索引值 + +```go +package main + +import "fmt" + +func main() { + // 未指定的值初始化为零值 + var arr1 = [...]int{0: 1, 2: 3} + + fmt.Printf("arr1: %v\n", arr1) + // arr1: [1 0 3] + +} + +``` + +## 访问数组元素 + +示例 + +```go +package main + +import "fmt" + +func main() { + + var arr1 [3]int + fmt.Printf("arr1: %v\n", arr1) + // arr1: [0 0 0] + + // 赋值 + arr1[0] = 1 + arr1[2] = 2 + fmt.Printf("arr1: %v\n", arr1) + // arr1: [1 0 2] + + // 取值 + fmt.Printf("arr1[0]: %v\n", arr1[0]) + // arr1[0]: 1 + + // 获取数组长度 + fmt.Printf("len(arr1): %v\n", len(arr1)) + // len(arr1): 3 + + // 数组长度越界 + fmt.Printf("arr1[0]: %v\n", arr1[3]) + // invalid argument: index 3 out of bounds [0:3] +} +``` + +## 遍历数组 + +方式一:for + +```go +package main + +import "fmt" + +func main() { + + var arr = [...]int{100, 200, 300} + + // 快捷键for + tab + for i := 0; i < len(arr); i++ { + fmt.Printf("arr[%v]=%v\n", i, arr[i]) + } + + // arr[0]=100 + // arr[1]=200 + // arr[2]=300 +} + +``` + +方式二:for...range + +```go +package main + +import "fmt" + +func main() { + + var arr = [...]int{100, 200, 300} + + // 快捷键forr + tab + // 索引, 值 + for index, value := range arr { + fmt.Printf("arr[%v]=%v\n", index, value) + } + + // arr[0]=100 + // arr[1]=200 + // arr[2]=300 +} + +``` + + + diff --git a/blog/golang/golang-process.md b/blog/golang/golang-process.md index 99490515c38981d5586299841bb7f6cd9b5ba637..82f72d3c0b57da23a751c3db88fc0d331fe0d13c 100644 --- a/blog/golang/golang-process.md +++ b/blog/golang/golang-process.md @@ -243,7 +243,7 @@ func main() { ### for...range -for...range遍历数组、切片、字符串、map及通道(channel) +for...range 遍历数组、切片、字符串、map 及通道(channel) 返回值: @@ -270,7 +270,7 @@ func main() { ``` -遍历map +遍历 map ```go package main @@ -295,3 +295,131 @@ func main() { - break - continue - goto + +#### break + +break 结束 for switch select 的代码块 + +break 注意事项 + +- 单独在 select 中使用 break,和不使用 break 没区别 +- 单独在表达式 switch 语句,并且没有 falllthough,使用 break 和不使用 break 没区别 +- 单独在表达式 switch 语句,并且有 falllthough,使用 break 能够终止 fallthough 后面的 case 语句 +- 带标签的 break,可以跳出多层 select/switch 作用域,让 break 更加灵活,写法更加简单灵活,不需要使用控制变量一层一层跳出循环,没有带 break 的只能跳出当前语句块 + +示例 + +for + +```go +package main + +import "fmt" + +func main() { + + for i := 0; i < 10; i++ { + if i >= 3 { + break + } + fmt.Printf("%v\t", i) + } + // 0 1 2 +} + +``` + +switch + +```go +package main + +import "fmt" + +func main() { + + i := 1 + + switch i { + case 1: + fmt.Println("1") + fallthrough + case 2: + fmt.Println("2") + // break + case 3: + fmt.Println("3") + // break + } +} + +``` + +标签 + +```go +package main + +import "fmt" + +func main() { + +LABEL: + for i := 0; i < 10; i++ { + fmt.Printf("%v ", i) + + if i >= 3 { + break LABEL + } + } + + fmt.Println("end") +} +// 0 1 2 3 end + +``` + +#### continue + +只能用在 for 循环,终止本次循环,进行下次循环 + +```go +package main + +import "fmt" + +func main() { + + for i := 0; i < 10; i++ { + + if i%2 == 0 { + continue + } else { + fmt.Printf("%v ", i) + } + } + // 1 3 5 7 9 +} + +``` + +#### goto + +通过标签进行代码之间的无条件跳转 + +```go +package main + +import "fmt" + +func main() { + + goto LABEL + fmt.Println("label") + +LABEL: + fmt.Println("end") +} +// end + +``` diff --git a/blog/golang/golang-slice.md b/blog/golang/golang-slice.md new file mode 100644 index 0000000000000000000000000000000000000000..a0813b8b9b9305b8b2dc92cdfb37f35b8f494fb7 --- /dev/null +++ b/blog/golang/golang-slice.md @@ -0,0 +1,92 @@ +# 第十三章 Golang 切片 slice + +切片:可变长度的数组 + +- 自动扩容 + +## 切片声明 + +和数组类似,区别在于不添加长度 + +```go +var identifier []type +``` + +切片是引用类型,可以使用`make` 函数创建切片 + +```go +// len是数组长度,也是切片的初始长度 +var slice []type = make([]type, len) + +// 简写 +slice := make([]type, len) + +// 指定容量 +slice := make([]type, len, capacity) +``` + +示例 + +```go +package main + +import "fmt" + +func main() { + + // 数组 指定长度 + var arr = [...]int{} + + // 切片 不指定长度 + var slice = []int{} + + fmt.Printf("arr: %T\n", arr) + // arr: [0]int + + fmt.Printf("slice: %T\n", slice) + // slice: []int + +} + +``` + +使用make声明 + +```go +package main + +import "fmt" + +func main() { + + var slice = make([]int, 3) + + fmt.Printf("slice: %T\n", slice) + // slice: []int + +} + +``` + +## 切片的长度和容量 + +```go +package main + +import "fmt" + +func main() { + + var slice = make([]int, 3) + + // 长度 + fmt.Printf("len(slice): %v\n", len(slice)) + // len(slice): 3 + + // 容量 + fmt.Printf("cap(slice): %v\n", cap(slice)) + // cap(slice): 3 + +} + +``` diff --git a/blog/golang/index.md b/blog/golang/index.md index 8b1473f5ab3aacc642929946a1783b1c3b0447d3..0fe940e523ec6de85fc3422b6455642c42055e72 100644 --- a/blog/golang/index.md +++ b/blog/golang/index.md @@ -30,9 +30,13 @@ [第十一章 Golang 流程控制](/blog/golang/golang-process.md) +[第十二章 Golang 数组 array](/blog/golang/golang-array.md) + +[第十三章 Golang 切片 slice](/blog/golang/golang-slice.md) + https://www.bilibili.com/video/BV1ME411Y71o?p=27&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da -https://www.bilibili.com/video/BV1zR4y1t7Wj?p=26&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da \ No newline at end of file +https://www.bilibili.com/video/BV1zR4y1t7Wj?p=32&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da \ No newline at end of file