使用goto语句能简化代码:
func gotoDemo2() { for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 2 { // 设置退出标签 goto breakTag } fmt.Printf("%v-%v\n", i, j) } } return // 标签 breakTag: fmt.Println("结束for循环") } break跳出循环
continue继续下次循环
数组 数组定义 var 变量名 [元素数量]T var a [3]int var b [4]string 数组初始化 package main import "fmt" func main() { var testArray [3]int var numArray = [3]int{1, 2, 3} var strArray = [3]string{"a", "b", "c"} fmt.Println(testArray) fmt.Println(numArray) fmt.Println(strArray) }使用[...]可以根据初始值自动判断元素有多少
package main import "fmt" func main() { var testArray [3]int var numArray = [...]int{1, 2, 3,4,5} var strArray = [...]string{"a", "b", "c", "d","f","v"} fmt.Println(testArray) fmt.Println(numArray) fmt.Println(strArray) } 数组遍历for循环遍历
package main import "fmt" func main() { var testArray [3]int var numArray = [...]int{1, 2, 3, 4, 5} var strArray = [...]string{"a", "b", "c", "d", "f", "v"} fmt.Println(testArray) fmt.Println(numArray) fmt.Println(strArray) for i := 0; i < len(numArray); i++ { fmt.Println(i) } for v := 0; v < len(strArray); v++ { fmt.Println(strArray[v]) } }for range遍历
package main import "fmt" func main() { var testArray [3]int var numArray = [...]int{1, 2, 3, 4, 5} var strArray = [...]string{"a", "b", "c", "d", "f", "v"} fmt.Println(testArray) fmt.Println(numArray) fmt.Println(strArray) for i, v := range numArray { fmt.Println(i, v) } fmt.Println("----------------------------------------------------") for m, n := range strArray { fmt.Println(m, string(n)) } }运行结果可以明显看出他两个是有区别的。
for循环遍历的结果并没有把角标打印出来,而是直接出的结果。
for range循环遍历的结果时把对应的角标也打印了出来,所以我们可以改善一下,使用匿名变量可以让for range的结果for循环的结果一样。
package main import "fmt" func main() { var testArray [3]int var numArray = [...]int{1, 2, 3, 4, 5} var strArray = [...]string{"a", "b", "c", "d", "f", "v"} fmt.Println(testArray) fmt.Println(numArray) fmt.Println(strArray) for _, v := range numArray { fmt.Println(v) } fmt.Println("----------------------------------------------------") for _, n := range strArray { fmt.Println(string(n)) } }同样的原理,可以对多为数组进行遍历。
切片切片跟数组很像,但是切片相当于在数组类型的基础上做了一层封装,相较于数组可以更快的操作一块数据集合。
切片定义 var 变量名 [元素个数]T可以看到他的定义方式跟数组一模一样,所以他的初始化也是一样的。
切片长度和容量用内置函数len(),cap()可以求出切片的长度容量
package main import "fmt" func main() { var test1Slice [3]int fmt.Println(len(test1Slice)) fmt.Println(cap(test1Slice)) var test2Slice = [...]string{"a", "b", "c", "d", "e", "f"} fmt.Println(len(test2Slice)) fmt.Println(cap(test2Slice)) } 表达式切片表达式中有low和high两个定义来表示切片中的界限值
func main() { a := [5]int{1, 2, 3, 4, 5} s := a[1:3] // s := a[low:high] fmt.Printf("s:%v len(s):%v cap(s):%v\n", s, len(s), cap(s)) } a[2:] // 等同于 a[2:len(a)] a[:3] // 等同于 a[0:3] a[:] // 等同于 a[0:len(a)] make()函数构造切片 make([]T,元素数量,切片容量)example:
func main(){ a := make([]int,2,10) } 参考 判断切片是否为空一定要使用len(s)==0来判断,不能使用nil比较来判断。
append()方法添加元素