четверг, 24 января 2019 г.

Эффективный Go: массивы

Массивы полезны при планировании подробной компоновки памяти и иногда могут помочь избежать аллокации, но в первую очередь они являются строительным блоком для срезов.

Существуют большие различия между способами работы массивов в Go и C. В Go

  • Массивы являются значениями. Присвоение одного массива другому копирует все элементы.
  • В частности, если вы передаете массив функции, она получит копию массива, а не указатель на него.
  • Размер массива является частью его типа. Типы [10]int и [20]int различны.

Свойство value может быть полезным, но также и дорогим; если вы хотите C-подобное поведение и эффективность, вы можете передать указатель на массив.

func Sum(a *[3]float64) (sum float64) {
    for _, v := range *a {
        sum += v
    }
    return
}

array := [...]float64{7.0, 8.5, 9.1}
x := Sum(&array)  // Отметьте явный оператор адреса

Но даже этот стиль не идиоматичен. Вместо этого используйте срезы.


Читайте также:


Комментариев нет:

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