Массивы полезны при планировании подробной компоновки памяти и иногда могут помочь избежать аллокации, но в первую очередь они являются строительным блоком для срезов.
Существуют большие различия между способами работы массивов в 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) // Отметьте явный оператор адреса
Но даже этот стиль не идиоматичен. Вместо этого используйте срезы.
Читайте также:
- Эффективный Go: данные, аллокация с помощью new
- Основы Go: массивы (arrays)
- Основы Go: срезы (slices)
Комментариев нет:
Отправить комментарий