Go是一种开源的程序设计语言,它意在使得人们能够方便地构建简单、可靠、高效的软件。(来自Go官网golang.org)
类似UNIX echo命令的实现,它将命令行参数输出到一行:
_echo1.go_
package main
import (
"fmt"
"os"
)
func main() {
var s, sep string
for i := 1; i < len(os.Args); i++ {
s += sep + os.Args[i]
sep = " "
}
fmt.Println(s)
}
os.Args接收命令行参数,第一个值是程序名称,之后依次是传入的值。可以使用for range的方式遍历数组:
_echo2.go_
package main
import (
"fmt"
"os"
)
func main() {
var s, sep string
for _, arg := range os.Args {
s += sep + arg
sep = " "
}
fmt.Println(s)
}
Go不允许声明的变量未使用,所以使用空标志符,_(即下划线),可以忽略值。range有两个返回值,第一个是数组的索引,第二个是数组的值。
字符串使用+进行连接,旧的字符串会被回收,如果有大量的数据需要处理,代价就会比较大。一个简单和高效的方式是使用strings包中的Join函数:
_echo3.go_
package main
import (
"fmt"
"os"
"strings"
)
func main() {
fmt.Println(strings.Join(os.Args, " "))
}
最后,如果我们不关心格式,只是想看值,可以直接用Println函数输出:
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.Args[1:])
}
os.Args[1:]表示数组索引从1到最后,包括最后,类似的os.Args[:2]表示数组索引从开始到2,不包括2,os.Args[2:3]表示数组索引从2到3,包括2不包括3,左闭右开。
练习 1.1:修改echo程序输出os.Args[0],即命令的名字。
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.Args[0])
}
练习 1.2:修改echo程序,输出参数的索引和值,每行一个。
package main
import (
"fmt"
"os"
)
func main() {
for index, arg := range os.Args {
fmt.Println(index, arg)
}
}
练习 1.3:尝试测量可能低效的程序和使用strings.Join的程序在执行时间上的差异。
空