Рекомендации по производительности применимы только к часто выполняемому за время работы программы коду.
Предпочитайте strconv вместо fmt
При преобразовании примитивов в/из строк strconv быстрее, чем fmt.
Менее удачный вариант:
for i := 0; i < b.N; i++ {
s := fmt.Sprint(rand.Int())
}
BenchmarkFmtSprint 143 ns/op 2 allocs/op
Более удачный вариант:
for i := 0; i < b.N; i++ {
s := strconv.Itoa(rand.Int())
}
BenchmarkStrconv 64.2 ns/op 1 allocs/op
Избегайте преобразования строки в байты
Не создавайте многократно байтовые срезы из фиксированной строки. Вместо этого выполните преобразование один раз и зафиксируйте результат.
Менее удачный вариант:
for i := 0; i < b.N; i++ {
w.Write([]byte("Hello world"))
}
BenchmarkBad 50000000 22.2 ns/op
Более удачный вариант:
data := []byte("Hello world")
for i := 0; i < b.N; i++ {
w.Write(data)
}
BenchmarkGood 500000000 3.25 ns/op
Читайте также:
- Go style guides: избегайте использования встроенных имен
- Go style guides: избегайте встраивания типов в общедоступные структуры
- Go style guides: избегайте использования init()
Комментариев нет:
Отправить комментарий