从标准输入中读取数据
1.if
2.map key
3.函数
4.bufio
5.调用
6.fmt.Printf函数对一些表达式产生格式化输出
注意:
go
EOF
ctrl+d
文件的是直接
cat input | go run main.go
dup1,go
import (
"bufio"
"fmt"
"os"
)func main() {
content := make(map[string]int)
input := bufio.NewScanner(os.Stdin)
for input.Scan() {
content[input.Text()]++
}
for line,n := range content {
if n >= 1 {
fmt.Printf("%d \t %s \n",n,line)
}
}
}
从文件中读取数据
1.os.Open函数返回两个值。第一个值是被打开的文件
2.os.Open
3.
4.map函数创建的数据结构的引用,作为参数传递给某函数时相当于引用传递
import (
"bufio"
"fmt"
"os"
)func main() {
content := make(map[string]int)
files := os.Args[1:] //获取命令行参数里的文件路径
if len(files) == 0 {
//从标准输入中读取数据
countLines(os.Stdin,content)
} else {
//从文件中读取数据
//如果有多个文件
for _,path := range files {
f,err := os.Open(path) //读取文件
//读取出错
if err != nil {
fmt.Fprintf(os.Stderr,"dup2:%v \n",err)
continue
}
countLines(f,content)
//注意方法名的大小写
f.Close()
}
}
for line,n := range content {
if n > 1 {
fmt.Printf("%d\t%s\n",line)
}
}
}//声明一个函数,实参类型:os.File,content map[string]int
func countLines(f os.File,content map[string]int) {
input := bufio.NewScanner(f)
for input.Scan() {
content[input.Text()]++
}
}
~
一口气把全部输入数据读到内存中,一次分割为多行,然后处理它们
1.ReadFile函数(来自于IoUtil文件的全部内容,返回一个字节切片(
2.strings.Split函数把字符串分割成子串的切片(来自于
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">package main
import (
"fmt"
"io/IoUtil"
"os"
"strings"
)
func main() {
content := make(map[string]int)
files := os.Args[1:] //获取命令行参数里的文件路径
//从文件中读取数据
//如果有多个文件
for _,path := range files {
data,err := IoUtil.ReadFile(path) //读取文件
//读取出错
if err != nil {
fmt.Fprintf(os.Stderr,"dup3:%v \n",err)
continue
}
msgs := strings.Split(string(data),"\n")
for _,msg := range msgs {
content[msg]++
}
}
for line,line)
}
}
}