Skip to content

Instantly share code, notes, and snippets.

@romanitalian
Last active October 15, 2022 21:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save romanitalian/164fbf350be5db81b08d0ead68931b63 to your computer and use it in GitHub Desktop.
Save romanitalian/164fbf350be5db81b08d0ead68931b63 to your computer and use it in GitHub Desktop.
package main
import (
"strings"
"testing"
"time"
)
func timeIntToString(val int) string {
switch val {
case 0:
return "0"
case 1:
return "1"
case 2:
return "2"
case 3:
return "3"
case 4:
return "4"
case 5:
return "5"
case 6:
return "6"
case 7:
return "7"
case 8:
return "8"
case 9:
return "9"
case 10:
return "10"
case 11:
return "11"
case 12:
return "12"
case 13:
return "13"
case 14:
return "14"
case 15:
return "15"
case 16:
return "16"
case 17:
return "17"
case 18:
return "18"
case 19:
return "19"
case 20:
return "20"
case 21:
return "21"
case 22:
return "22"
case 23:
return "23"
case 24:
return "24"
case 25:
return "25"
case 26:
return "26"
case 27:
return "27"
case 28:
return "28"
case 29:
return "29"
case 30:
return "30"
case 31:
return "31"
case 32:
return "32"
case 33:
return "33"
case 34:
return "34"
case 35:
return "35"
case 36:
return "36"
case 37:
return "37"
case 38:
return "38"
case 39:
return "39"
case 40:
return "40"
case 41:
return "41"
case 42:
return "42"
case 43:
return "43"
case 44:
return "44"
case 45:
return "45"
case 46:
return "46"
case 47:
return "47"
case 48:
return "48"
case 49:
return "49"
case 50:
return "50"
case 51:
return "51"
case 52:
return "52"
case 53:
return "53"
case 54:
return "54"
case 55:
return "55"
case 56:
return "56"
case 57:
return "57"
case 58:
return "58"
case 59:
return "59"
case 60:
return "60"
case 2022:
return "2022"
case 2023:
return "2023"
case 2024:
return "2024"
case 2025:
return "2025"
case 2026:
return "2026"
case 2027:
return "2027"
case 2028:
return "2028"
case 2029:
return "2029"
case 2030:
return "2030"
case 2031:
return "2031"
case 2032:
return "2032"
default:
return "0"
}
}
func timeFormat(nn time.Time, sb strings.Builder) strings.Builder {
sb.WriteString(timeIntToString(nn.Year()) + "-")
sb.WriteString(timeIntToString(int(nn.Month())) + "-")
sb.WriteString(timeIntToString(nn.Day()) + " ")
sb.WriteString(timeIntToString(nn.Hour()) + ":")
sb.WriteString(timeIntToString(nn.Minute()))
return sb
}
// BenchmarkTimeFormatFast-8 3 899 320 277.8 ns/op 64 B/op 0 allocs/op
func BenchmarkTimeFormatFast(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
now := time.Now()
var strBuilder strings.Builder
for i := 0; i < b.N; i++ {
strBuilder = timeFormat(now, strBuilder)
_ = strBuilder.String()
}
}
// BenchmarkTimeFormat2-8 9 556 900 122.4 ns/op 16 B/op 1 allocs/op
func BenchmarkTimeFormatStandard(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
now := time.Now()
for i := 0; i < b.N; i++ {
_ = now.Format("2006-01-02")
}
}
// BenchmarkStr-8 1000000000 0.8312 ns/op 0 B/op 0 allocs/op
func BenchmarkStr(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var y, m, r string
for i := 0; i < b.N; i++ {
y = "111"
m = "222"
r = y
}
_, _ = y, m
_ = r
}
// BenchmarkStrWithConcat-8 31274161 36.73 ns/op 8 B/op 1 allocs/op
func BenchmarkStrWithConcat(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var y, m, r string
for i := 0; i < b.N; i++ {
y = "111"
m = "222"
r = y + m
}
_, _ = y, m
_ = r
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment