Рекомендации по производительности применимы только к часто выполняемому за время работы программы коду.
Предпочитайте 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()
 

Комментариев нет:
Отправить комментарий