1. 判断时间格式是否是RFC3339
- 第一种姿势:每次Compile并匹配
- 第二种姿势:公共的正则Regexp,每次只做匹配
import ("fmt""regexp""time")var staticRegexp *regexp.Regexpfunc init() {staticRegexp, _ = regexp.Compile("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[+-]\\d{2}:\\d{2}$")}func IsRFC3339ByCompileAndMatch(datetime string) bool {r, _ := regexp.Compile("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[+-]\\d{2}:\\d{2}$")return r.MatchString(datetime)}func IsRFC3339ByMatch(datetime string) bool {return staticRegexp.MatchString(datetime)}func IsRFC3339ByTimeParse(datetime string) bool {_, err := time.Parse(time.RFC3339, datetime)if nil != err {fmt.Println("false", err)return false}return true}func main() {datetime := "2006-01-02T15:04:05+08:00"fmt.Println(IsRFC3339ByCompileAndMatch(datetime))fmt.Println(IsRFC3339ByTimeParse(datetime))fmt.Println(IsRFC3339ByMatch(datetime))}
2 基准测试运行效果
cpu: Intel(R) Core(TM) i5-6267U CPU @ 2.90GHzBenchmarkIsRFC3339ByCompileAndMatchBenchmarkIsRFC3339ByCompileAndMatch-4 1000000000 0.0000907 ns/opBenchmarkIsRFC3339ByMatchBenchmarkIsRFC3339ByMatch-4 1000000000 0.0000038 ns/opBenchmarkIsRFC3339ByTimeParseBenchmarkIsRFC3339ByTimeParse-4 1000000000 0.0000029 ns/opPASS
3 结论
- 能不用正则尽量避免使用
- 公共变量的cpu消耗量是每次compile并匹配的30分之1-