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里的元素,不影响ele
fmt.Printf("%d %d %d\n", i, arr[i], ele)//0 9 1
ele +=1//修改ele不影响arr
fmt.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}}
type slice struct{
array unsafe.Pointer
lenintcapint}
切片的初始化
funcmain(){var s []int//切片声明,array=nil,len=cap=0
s =[]int{}//初始化,len=cap=0
s =make([]int,3)//初始化,len=cap=3
s =make([]int,3,5)//初始化,len=3,cap=5
s =[]int{1,2,3,4,5}//初始化,len=cap=5
s2d :=[][]int{{1},{2,3},//二维数组各行的列数相等,但二维切片各行的len可以不等}}
funcmain(){var m map[string]int//声明map,指定key和value的数据类型
m =make(map[string]int)//初始化,容量为0
m =make(map[string]int,5)//初始化,容量为5。强烈建议初始化时给一个合适的容量,减少扩容的概率
m =map[string]int{"语文":0,"数学":39}//初始化时直接赋值}
funcmain(){var ch chanint
fmt.Printf("ch is nil %t\n", ch ==nil)//ch is nil true
fmt.Printf("len of ch is %d\n",len(ch))//len of ch is 0
ch =make(chanint,10)
fmt.Printf("len of ch is %d\n",len(ch))//len of ch is 0
fmt.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 10
fmt.Printf("cap of ch is %d\n",cap(ch))//cap of ch is 10
ch <-3//阻塞
fmt.Printf("len of ch is %d\n",len(ch))//不会打印
fmt.Printf("cap of ch is %d\n",cap(ch))//不会打印}
send和recv
funcmain(){
ch :=make(chanint,8)//初始化,环形队列里可容纳8个int
ch <-1//往管道里写入(send)数据
ch <-2
ch <-3
ch <-4
ch <-5
v :=<-ch //从管道里取走(recv)数据
fmt.Println(v)//1
v =<-ch
fmt.Println(v)//2}
channel遍历:
通过for range的方式遍历管道,遍历前必须先关闭close(ch)管道,禁止再写入元素;
一旦close就不能再往管道里面追加元素
close(ch)//遍历前必须先关闭管道,禁止再写入元素//遍历管道里剩下的元素for ele :=range ch {
fmt.Println(ele)//3 4 5}
将文档编辑、创建和 PDF 生成添加到 WPF 应用程序。 TX Text Control for WPF Enterprise 是一个免版税、完全可编程的丰富编辑控件,它在专为 Visual Studio 设计的可重用组件中为开发人员提供了广泛的文字处理功能。它提供全面的文本格式,强大的邮件合并…
Spring Boot学习篇(十三)
shiro安全框架使用篇(五)
1 准备工作
1.1 在SysUserMapper.xml中书写自定义标签
<select id"findRoles" resultType"string">select name from sys_role where id (select roleid from sys_user_role where userid (S…
本期分享
DORA 的全称是 DevOps Research and Assessment,是一个致力于 DevOps 调研与研究的组织,2018 年加入 Google Cloud。自 2014 年起,DORA 每年会发布一份行业报告,基于对数千名从业者的调研,分析高效能团队与低…