https://books.studygolang.com/gopl-zh/ch1/ch1-02.html
参考Go圣经
编译过程
go build
go run
1.2 命令行参数
os.Args[1:]
获取方式一:
package main
import (
"fmt"
"os"
)
func main() {
var s, sep string
sep = " "
// 程序的命令行参数可从os包的Args变量获取;os包外部使用os.Args访问该变量。
for i := 1; i < len(os.Args); i++ {
// os.Args变量是一个字符串(string)的切片
// 用s[i]访问单个元素,用s[m:n]获取子序列。
s += sep + os.Args[i]
}
fmt.Println(s)
}
获取方式二:
package main
import (
"fmt"
"os"
)
func main() {
s, sep := "", " "
// range 关键词获取一对值(index, value)
// 丢弃不需要用到的index,用 _
for _, arg := range os.Args[1:] {
s += sep + arg
}
fmt.Println(s)
}
** 获取方式三 **
package main
import (
"fmt"
"os"
"strings"
)
func main() {
// stirng.Join 函数连接字符串
fmt.Println(strings.Join(os.Args[1:], " "))
}
练习
package main
import (
"fmt"
"os"
)
// 练习 1.1: 修改echo程序,使其能够打印os.Args[0],即被执行命令本身的名字。
// 练习 1.2: 修改echo程序,使其打印每个参数的索引和值,每个一行。
// 练习 1.3: 做实验测量潜在低效的版本和使用了strings.Join的版本的运行时间差异。(1.6节讲解了部分time包,11.4节展示了如何写标准测试程序,以得到系统性的性能评测。)
func main() {
// 1.1
fmt.Println("1,1 ", os.Args[0]);
// 1.2
for index, value := range os.Args[1:] {
fmt.Println(index, "=", value);
}
}
1.3. 查找重复的行
命令行输入
// 打印标准输入中多次出现的行,以重复次数开头
package main
import (
"fmt"
"os"
"bufio" // 处理输入和输出
)
func main() {
// make 创建空map
// map[key type]value type
counts := make(map[string]int)
// 读取输入
inputs := bufio.NewScanner(os.Stdin