その1. regexp
による正規表現を使ったバリデーション
reg.go
validater := regexp.MustCompile(`\d{4}(/\d{2}){2} \d{2}(:\d{2}){2}`)
fmt.Println(validater.MatchString("2012/12/10 12:30:45"))
// true
fmt.Println(validater.MatchString("Mon, 02 Jan 2012 12:30:45"))
// false
その2. time
による文字列一致を使ったバリデーション
time.go
layout := "2006/01/02 15:04:05"
_, err := time.Parse(layout, "2012/12/10 12:30:45")
// err == nil にてokを確認
※ layout
の指定方式は magical date magical reference date を参照。
他言語と指定形式が異なるため注意が必要ヅラ(YYYY/MM/DD等でなく指定の実値にて設定)
互いのBenchmark比較
validation_test.go
func BenchmarkRegexpPack(b *testing.B) {
validater := regexp.MustCompile(`\d{4}(/\d{2}){2} \d{2}(:\d{2}){2}`)
b.ResetTimer()
for i := 0; i < b.N; i++ {
validater.MatchString("2012/12/10 12:30:45")
}
}
func BenchmarkTimePack(b *testing.B) {
layout := "2006/01/02 15:04:05"
b.ResetTimer()
for i := 0; i < b.N; i++ {
time.Parse(layout, "2012/12/10 12:30:45")
}
}
// > $ go test -bench . -benchmem -benchtime 3s
// BenchmarkRegexpPack-12 20000000 286 ns/op 0 B/op 0 allocs/op
// BenchmarkTimePack-12 30000000 145 ns/op 0 B/op 0 allocs/op