os.Args学习
package main
import (
"fmt"
"os"
"strings"
)
func main() {
fmt.Println("Hello, world 世界!")
var s, sep string
for i := 1; i < len(os.Args); i++ {
s += sep + os.Args[i]
sep = " "
}
fmt.Println(os.Args[0])
fmt.Println(s)
fmt.Println(strings.Join(os.Args[1:], " "))
fmt.Println(strings.Join(os.Args[1:], "_"))
fmt.Println(strings.Join(os.Args[1:3], "_"))
// for range 的使用
s = ""
sep = ""
for _, arg := range os.Args[1:] {
s += sep + arg
sep = "_"
}
fmt.Println(s)
// fmt.Println(strings.Join(os.Args[1:5], "#"))
// panic: runtime error: slice bounds out of range [:5] with capacity 4
// goroutine 1 [running]:
// main.main()
// /Users/majinbo/Study/go/hellowork.go:21 +0x33f
// exit status 2
}
go run hellowork.go abc def ghi
Hello, world 世界!
/var/folders/l2/6m6kq90s4p382ld1r7bv4dwm0000l2/T/go-build2133640648/b001/exe/hellowork
abc def ghi
abc def ghi
abc_def_ghi
abc_def
abc_def_ghi
从例子里透出的知识点:
- os.Args 其实同C语言里的agrc 与argv 这两个参数的作用;
- 数字访问单个元素,可以直接s[i]访问;
- s[1:3] 表示访问的是从下标1开始,连续3-1个元素,即左开右闭[1,3)
- s[1:] 表示从下标元素到结尾,相当于s[1:len(s)]
- strings.Join 相当于上边的for循环的结果
- for range的使用,每次迭代,range产生一对值,索引与元素,可通过"_"丢掉不用的变量