“6dfd789bfce80489bd9ad92573e21c4d90750b18”上不存在“...memory/git@gitcode.net:paddlepaddle/PaddleDetection.git”
提交 efcf9fc3 编写于 作者: 彭世瑜's avatar 彭世瑜

fix

上级 398615de
# 第十二章 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
}
```
......@@ -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
```
# 第十三章 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
}
```
......@@ -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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册