Go: Раскрытие потенциала скорости
![](https://habrastorage.org/getpro/habr/upload_files/8a7/53c/f41/8a753cf416760479fb2e5714d1223411.png)
Я всегда борюсь за скорость. Началось это все с того, как я прочитал книгу “Грокаем алгоритмы” и меня заинтересовало измерение скорости выполнения. Потом, решая задачи на LeetCode я расстраивался, если алгоритм получался медленным. Недавно мне пришла идея написать пост на эту тему, а во время написания изучить этот вопрос получше. Я прочитал не мало статьей, большинство из которых - англоязычные.Так что вот советы по увеличению скорости Вашего приложения на Golang :
1. Выделять ёмкость для среза с помощью make
При создании среза выделяйте ёмкость с помощью make, так Вы избавитесь от перераспределений
2. При возвращении указателя, объявлять его при создании переменной
func (r Ruleset) Match(path string) (*Rule, error) {
for i := len(r) - 1; i >= 0; i-- {
rule := r[i] //так НЕ надо
rule := &r[i] //так надо
match, err := rule.Match(path)
if match || err != nil {
return &rule, err //так НЕ надо
return rule, err //так надо
}
}
return nil, nil
}
3. Пишите бенчмарки
Пишите бенчмарки для вашего приложения, так Вы поймете, в каком месте оно работает медленнее всего. Источник для того, чтобы научиться писать бенчмарки: https://dave.cheney.net/2013/06/30/how-to-write-benchmarks-in-go и др.
4. Используйте горутины!
Когда есть возможность, используйте горутины. Например, когда результат 2-х операций не зависит друг от друга, можете использовать горутины. Думаю, доказывать, что таким образом приложение становится быстрее, не надо :)