由于Go没有逗号表达式,而++和–是语句而不是表达式,如果想在for中执行多个变量,需要使用平行赋值
for i,j := 1,10; i < j; i,j=i+1,j+1 { //死循环
fmt.Println(i)
}
而不能写成
for i,10; i < j; i++,j++ {
fmt.Println(i)
}
for的condition在每执行一次循环体时便会执行一次,因此在实际开发过程中需要注意不要让condition中计算简单而不是复杂。
for i,j :=0,len(str); i<j ; i++ {
fmt.Println(str[i])
}
而不要写成
for i=0; i< len(str); i++ {
fmt.Println(str[i])
}
另外for是遍历string,array,slice,map,chanel的方式,而使用保留字rang则能灵活的处理。rang是迭代器,能根据不同的内容,返回不同的东西。
for index,char := range string {}
for index,value := range array {}
for index,value := range slice {}
for key,value := range map {}
需要注意的是for range遍历string时得到的是字节索引位置和UTF-8格式rune类型数据(int32)。
for pos,value := range "Go在中国" {
fmt.Printf("character '%c' type is %T value is %v,and start at byte position %d \n",value,pos)
str :=string(value) //convert rune to string
fmt.Printf("string(%v)=>%s \n",str)
}
---------OutPut------------ 一个汉字占三个字节
character 'G' type is int32 value is 71,and start at byte position 0
string(71)=>G
character 'o' type is int32 value is 111,and start at byte position 1
string(111)=>o
character '在' type is int32 value is 22312,and start at byte position 2
string(22312)=>在
character '中' type is int32 value is 20013,and start at byte position 5
string(20013)=>中
character '国' type is int32 value is 22269,and start at byte position 8
string(22269)=>国
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。