«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как повторная сменность ведет себя с основными массивами в ломтиках Go?

Как повторная сменность ведет себя с основными массивами в ломтиках Go?

Опубликовано в 2025-02-06
Просматривать:530

How Does Re-slicing Behave with Underlying Arrays in Go Slices?

re-sruicing срезы в Go: путаница и Clarity

в Go, ломтики являются мощным и эффективным способом представления массивов данных. Однако понимание их тонкостей может быть сложным для начинающих. Одним из таких аспектов является концепция срезов повторной настройки. Импорт "FMT" func main () { A: = Make ([] int, 5) Printslice ("A", A) b: = Make ([] int, 0, 5) Printslice ("b", b) C: = B [: 2] Printslice ("c", c) D: = C [2: 5] Printslice ("D", D) } func printslice (s string, x [] int) { fmt.printf ("%s len =%d cap =%d%v \ n", S, Len (x), Cap (x), x) }. Удивительным результатом является то, что срез C, созданный как срез первых двух элементов B, имеет емкость 5 вместо 2. Анкет В ходе ломтики не хранят фактические данные; Скорее, они ссылаются на основной массив. Когда создается срез, он указывает на сегмент этого основного массива. Анкет Когда срез C создается из B, он становится окном над первыми двумя элементами b. Однако базовый массив и, следовательно, способность C остается 5, что включает неиспользованные слоты в b. основной() { b: = Make ([] int, 0, 5) C: = B [: 2] D: = C [1: 5] // Это эквивалентно D: = B [1: 5] D [0] = 1 Printslice ("c", c) Printslice ("D", D) }

В этом случае изменение значения D также изменяет значение C, демонстрируя, что C и D являются просто разными окнами в одном и том же базовом массиве. Нарезка имеет решающее значение для эффективной работы с ломтиками в Go. Это позволяет вам создавать срезы, которые динамически приспосабливаются к различным размерам данных без необходимости копирования или перераспределения памяти.

]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3