for range在go中非常常用,可以遍历字符串,数组,切片,映射,管道。
for range
一般而言,for range遍历,有一个索引和一个值,这与需要变量的对象有关。 简单的认为一个是索引index,和一个value即可
desc := "我是marksugar"
for index,value := range desc {
fmt.Printf("%d %T %qn",index,value,value)
}
运行
[root@marksugar /opt/Golang]# go run for3.go
0 int32 '我'
3 int32 '是'
6 int32 'm'
7 int32 'a'
8 int32 'r'
9 int32 'k'
10 int32 's'
11 int32 'u'
12 int32 'g'
13 int32 'a'
14 int32 'r'
在for range中,如果不需要index或者value,可以使用_(下划线)不接收
desc := "我是marksugar" for _,value := range desc {}注意:这里的空白标识符是go内置,我们只能对它进行赋值
比如下面这段代码:
var value int _,value = 1,2 fmt.Println(value)
这里的输出是2。这里值得注意的是,因为空白标识符是内置的,不能使用:=(冒号)定义 。如果一定要使用:=赋值,在简短声明中,至少需要有一个是新定义的。那么需要如下定义:
package main import "fmt" func main(){ var value int _,value = 1,4 fmt.Println(value) }
运行:
[root@linuxea-marksugar /opt/Golang/work2]# go run biaoshifu.go 4如果这里使用简短声明就会报错的
# command-line-arguments ./biaoshifu.go:5:10: no new variables on left side of := ./biaoshifu.go:7:1: syntax error: unexpected EOF, expecting }如果我们要使用简短声明就需要一个新的变量,如下
package main import "fmt" func main(){
var value int _,value,newvalue := 1,4,5 fmt.Println(value,newvalue)
}运行
[root@linuxea-marksugar /opt/Golang/work2]# go run biaoshifu.go 4 5