不好意思啊,第一次学Golang,写了个文本去重来练习,文本内容大概75万行,用go test看了下最后的去重时间,需要17's,想知道还有哪里可以优化的。
代码如下
package distinct
import (
"bufio"
"fmt"
"io"
"os"
"strings"
)
//DistinctFile 为指定文件去重
func DistinctFile(file string, output string) {
// 读取需要去重的文件内容
f, _ := os.Open(file)
defer func() {
ferr := f.Close()
if ferr != nil {
fmt.Println(ferr.Error())
}
}()
reader := bufio.NewReader(f)
// 去重map
var set = make(map[string]bool, 0)
// 去重后的结果
var result string
for {
line, isPrefix, err := reader.ReadLine()
if err != nil {
break
}
if !isPrefix {
lineStr := string(line)
// key存在则跳出本次循环
if set[lineStr] {
continue
}
result += fmt.Sprintf("%s\n", lineStr)
set[lineStr] = true
}
}
// 写入另一个文件
nf, _ := os.Create(output)
io.Copy(nf, strings.NewReader(result))
defer nf.Close()
}
go test的结果是17.654s
package distinct
import "testing"
func TestDistinctFile(t *testing.T) {
DistinctFile("result.txt", "out.txt")
}
希望师傅们能指点一二
var result string
使用字符串拼接改为使用strings.Builder
提高字符串拼接性能。var set = make(map[string]bool, 0)
改为var set = make(map[string]struct{}, 1000)
先预分配1000个空间减少扩容.