В этом ответе предполагается, что searchDB
не сохраняет ссылку на переданный ему фрагмент.Представляется маловероятным, что функция сохраняет ссылку, учитывая имена переменных и функций.
Эти параметры имеют одинаковые характеристики памяти и производительности:
var tmpSlice []string
tmpSlice := []string{}
tmpSlice := make([]string, 0)
tmpSlice := make([]string, 0, 0)
Ни один из них не выделяет память до первого добавленияоперация.Если это ваши единственные варианты, выберите один из первых двух, потому что их легче читать.
Этот параметр будет иметь наилучшую производительность:
tmpSlice := make([]string, 0, 10)
Это гарантирует, что массив резервных копийдля среза выделяется один раз.При добавлении значений не будет перераспределений резервного массива.
Если аргумент searchDB
не экранирован, то в стеке будет сделано одно выделение для резервного массива.Это лучшая из возможных характеристик.Вы можете выяснить, сбрасывается ли аргумент, с помощью опции -gcflags "-m -l"
.
Принимая во внимание, что getDataFromDb
вызывает операцию базы данных, любая разница в производительности между опциями будет в шуме.Более важно написать ясный и простой код, чем оптимизировать его.
Я бы, вероятно, пошел с var tmpSlice []string
вместо tmpSlice := make([]string, 0, 10)
, потому что нет необходимости понимать, откуда взято значение 10 с первым.