Для
bytes.ToLower():BenchmarkSTDShortLowercase-12 23080384 51.11 ns/opДля собственной реализации, код которой лежит в файле с бенчмарками, в функции
BenchmarkSTDLongLowercase-12 7538932 161.1 ns/op
BenchmarkSTDShortMixed-12 19974499 59.08 ns/op
BenchmarkSTDLongMixed-12 3973327 304.0 ns/op
BenchmarkSTDShortUppercase-12 27904444 42.65 ns/op
BenchmarkSTDLongUppercase-12 5482158 220.9 ns/op
ToLowercase():BenchmarkOwnShortLowercase-12 41382306 29.19 ns/opИ здесь мы видим, что в среднем, наша функция быстрее в 2 раза, нежели реализация в std-либе
BenchmarkOwnLongLowercase-12 10526306 108.4 ns/op
BenchmarkOwnShortMixed-12 35293806 29.89 ns/op
BenchmarkOwnLongMixed-12 10962948 111.6 ns/op
BenchmarkOwnShortUppercase-12 40000665 29.95 ns/op
BenchmarkOwnLongUppercase-12 10810712 111.2 ns/op
Однако, почему так? Вопрос кроется в том, что
bytes.ToLower() корректно работает также с utf8