入门

命令行参数找出重复行常规版本涉及文件操作

命令行参数

命令行参数以os包中Args名字的变量供程序访问,在os包外面,使用os.Args这个名字

变量os.Args是一个字符串sliceos.Args[0]:命令本身的名字os.Args[1:]:另外的元素,是程序开始执行时的参数

package main

import (

"fmt"

"os"

"strings"

)

func main() {

//输出命令行名字

fmt.Println(os.Args[0])

s, sep := "", ""

// 每一次迭代,range产生一对值:索引和这个索引处元素的值

for _, arg := range os.Args[1:] {

s += sep + arg

sep = " "

}

fmt.Println(s)

fmt.Println(strings.Join(os.Args[1:], ", "))

}

空标识符_:可以用在任何语法需要变量名但是逻辑不需要的地方

找出重复行

常规版本

// dup 输出标准输入中出现次数大于1的行,前面是次数

package main

import (

"bufio"

"fmt"

"os"

)

func main() {

counts := make(map[string]int)

input := bufio.NewScanner(os.Stdin)

for input.Scan() {

counts[input.Text()]++

}

for line, n := range counts {

if n > 1 {

fmt.Printf("%d: %s\n", n, line)

}

}

}

涉及文件操作

package main

import (

"fmt"

"io/ioutil" "os" "strings")

func main() {

counts := make(map[string]int)

for _, filename := range os.Args[1:] {

data, err := ioutil.ReadFile(filename)

if err != nil {

fmt.Fprintf(os.Stderr, "dup2: %v\n", err)

continue

}

for _, line := range strings.Split(string(data), "\n") {

counts[line]++

}

}

for line, n := range counts {

if n > 1 {

fmt.Printf("%d: %s\n", n, line)

}

}

}

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: