Go语言基础知识总结(持续中) (3)

使用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) }

image-20210731171327280

使用[...]可以根据初始值自动判断元素有多少

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) }

image-20210731171526777

数组遍历

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]) } }

image-20210731172017012

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)) } }

image-20210731172321234

运行结果可以明显看出他两个是有区别的。

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)) } }

image-20210731172626881

同样的原理,可以对多为数组进行遍历。

切片

切片跟数组很像,但是切片相当于在数组类型的基础上做了一层封装,相较于数组可以更快的操作一块数据集合。

切片定义 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)) }

image-20210731174954269

表达式

切片表达式中有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) } 参考

image-20210801154140458

判断切片是否为空

一定要使用len(s)==0来判断,不能使用nil比较来判断。

append()方法添加元素

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwwfxw.html