2 回答
TA贡献1839条经验 获得超15个赞
这是我的看法
使用
MustCompile
编译静态正则表达式。如果它不编译并保存错误检查,这将导致恐慌从函数中提升编译正则表达式 - 您只需要编译一次。请注意,我使用小写首字母命名它,因此在包外看不到它。
检查错误时使用提前返回 - 这可以节省缩进并且是惯用的
为那些早期返回使用命名返回参数 - 保存为类型和一般类型定义 nil 值(虽然不是每个人的口味)
return time.Parse
直接检查错误(你以前不是)
编码
var dateRe = regexp.MustCompile(`_([0-9]{8}).txt$`)
func getLatestDate(path string) (date time.Time, err error) {
fns, err := filepath.Glob(filepath.Join(path, "*.txt"))
if err != nil {
return
}
max := ""
for _, fn := range fns {
if ms := dateRe.FindStringSubmatch(fn); ms != nil {
if ms[1] > max {
max = ms[1]
}
}
}
return time.Parse("20060102", max)
}
TA贡献1712条经验 获得超3个赞
这就是我将如何编写它。不要忽略错误,使用保护子句进行错误处理,并且不要在循环内重新编译正则表达式。
var datePat = regexp.MustCompile(`_([0-9]{8}).txt$`)
func getLatestDate(path string) (time.Time, error) {
fns, err := filepath.Glob(filepath.Join(path, "*.txt"))
if err != nil {
return time.Time{}, err
}
max := time.Time{}
for _, fn := range fns {
if ms := re.FindStringSubmatch(fn); ms != nil {
if t, err := time.Parse("20060102", ms[1]); err == nil && t.After(max) {
max = t
}
}
}
return max, nil
}
- 2 回答
- 0 关注
- 238 浏览
添加回答
举报