funcmain(){//遍历数组里的元素//i, ele := range的理解// -> range返回2个,1个是索引i,1个是元素ele// -> 将range的返回用来声明并初始化i和elefor i, ele :=range arr {fmt.Printf("index=%d, element=%d\n", i, ele)}//或者这样遍历数组for i :=0; i <len(arr); i++{//len(arr)获取数组的长度fmt.Printf("index=%d, element=%d\n", i, arr[i])}//遍历二维数组for row, array :=range arr {//先取出某一行for col, ele :=range array {//再遍历这一行fmt.Printf("arr[%d][%d]=%d\n", row, col, ele)}}}
通过for range遍历数组时取得的是数组里每一个元素的拷贝
funcmain(){arr :=[...]int{1,2,3}for i, ele :=range arr {//ele是arr中元素的拷贝arr[i]+=8//修改arr里的元素,不影响elefmt.Printf("%d %d %d\n", i, arr[i], ele)//0 9 1ele +=1//修改ele不影响arrfmt.Printf("%d %d %d\n", i, arr[i], ele)//0 9 2}for i :=0; i <len(arr); i++{fmt.Printf("%d %d\n", i, arr[i])//0 9//1 10//2 11}}
funcmain(){var ch chanintfmt.Printf("ch is nil %t\n", ch ==nil)//ch is nil truefmt.Printf("len of ch is %d\n",len(ch))//len of ch is 0ch =make(chanint,10)fmt.Printf("len of ch is %d\n",len(ch))//len of ch is 0fmt.Printf("cap of ch is %d\n",cap(ch))//cap of ch is 10}
channel的cap上限:达到cap的上限后,继续send会导致管道阻塞
funcmain(){ch :=make(chanint,10)for i :=0; i <10; i++{ch <-3}fmt.Printf("len of ch is %d\n",len(ch))//len of ch is 10fmt.Printf("cap of ch is %d\n",cap(ch))//cap of ch is 10ch <-3//阻塞fmt.Printf("len of ch is %d\n",len(ch))//不会打印fmt.Printf("cap of ch is %d\n",cap(ch))//不会打印}