我有以下代码:
func main() {
// counts := make(map[string]int)
files := os.Args[1:]
if len(files) == 0 {
counts := make(map[string]int)
countLines(os.Stdin, counts)
fmt.Println("os.Stdin")
printCounts(counts)
} else {
for _, arg := range files {
counts := make(map[string]int)
f, err := os.Open(arg)
if err != nil {
fmt.Fprintf(os.Stderr, "dup2: %v\n", err)
continue
}
countLines(f, counts)
f.Close()
// print counts of each file
printCounts(counts)
}
}
}
func printCounts(counts map[string]int) {
//...
}
func countLines(f *os.File, counts map[string]int){
//...
}
我在if-else语句中通过启动计数dict两次重复自己,
(counts := make(map[string]int)
)in if和else。
我的问题是写这个的地鼠的方式是什么?
使用new
在if-else语句之外进行分配并在每个块中执行启动会更好吗?
答案 0 :(得分:1)
我的代码中没有多少重复。你可以以某种方式合并if和else部分,但我不是粉丝。
一个简单的重构就是将counts
初始化移动到countLines
函数中并使其返回。
func countLines(f *os.File, counts map[string]int)
- >
func countLines(f *os.File) map[string]int
在做很多事情之前不要多考虑分配(假设至少有100K分配)并在进行少量优化之前对代码进行分析。地图不仅会在make
上分配内存,而且还会在您附加内存并且哈希表已满。