range的用法
仅为个人阅读时遇到的困惑的理解,希望友善讨论
2021.6.25
《GO语言圣经》-《GO程序设计语言》
P5
代码一
package main
import (
"fmt"
"os"
)
func main() {
var s, sep string
for i, arg := range os.Args { //注意这行
fmt.Println(i)
fmt.Println(arg)
s += sep + arg
sep = " "
}
fmt.Println(s)
}
在命令行中运行
go run main.go 一 二三 四
得到的结果
0
C:\Users\Stream\AppData\Local\Temp\go-build3043058665\b001\exe\main.exe
1
一
2
二三
3
四
C:\Users\Stream\AppData\Local\Temp\go-build3043058665\b001\exe\main.exe 一 二三 四
代码二
package main
import (
"fmt"
"os"
)
func main() {
var s, sep string
for i, arg := range os.Args[1:] { //注意这行
fmt.Println(i)
fmt.Println(arg)
s += sep + arg
sep = " "
}
fmt.Println(s)
}
在命令行中运行
go run main.go 一 二三 四
得到的结果
0
一
1
二三
2
四
一 二三 四
结论
range
获取一个范围,
有两个返回值,在本例中分别是i
和arg
。
第一个返回值i
总是从0开始的,和range
取范围的值(也就是本例中的os.Args
)无关。(也就是本例中os.Args[1:]
虽然是从os.Args
的1值开始取的,但是在range
中还是0)。
第二个返回值arg
是切片的结果。
我理解的:range
将os.Args
切成一个数组,先返回数组下标,再返回数组内容。