我有以下代码并且问我自己这是" go way"解决以下要求。
我需要打印按文件年龄排序的目录树。
package main
import (
"fmt"
"github.com/kr/fs"
"os"
"time"
"sort"
)
type fileinfo struct {
Path string
age time.Duration
}
func main() {
fmt.Print("test range of fs")
walker := fs.Walk("../")
var files []fileinfo
for walker.Step() {
if err := walker.Err(); err != nil {
fmt.Fprintln(os.Stderr, err)
continue
}
age := time.Now().Sub(walker.Stat().ModTime())
files = append(files,fileinfo{walker.Path(),age})
}
sort.Slice(files, func(i, j int) bool {
return files[i].age < files[j].age
})
for i:=0; i < len(files) ; i++ {
fmt.Print("File path: ",files[i].Path," age: ",files[i].age,"\n")
}
}
您对代码的看法是什么?
感谢您的帮助
答案 0 :(得分:2)
for i:=0; i < len(files) ; i++ {
fmt.Print("File path: ",files[i].Path," age: ",files[i].age,"\n")
}
使用for
迭代器可以更好地编写 range
数组循环。这使代码更容易阅读,避免愚蠢的错误,并且它可以与地图和频道等其他结构一起使用。
for _,file := range files {
fmt.Print("File path: ",file.Path," age: ",file.age,"\n")
}
有关详情,请参阅Go by Example: Range。
由于最后有一个换行符,并且每个元素之间有一个空格,fmt.Println
可能比fmt.Print
更好。它会自动在每个元素和最后一行之间添加空格。
fmt.Println("File path:", file.Path, "age:", file.age)