170 похожих чатов

Добрый день! Господа, подскажите пожалуйста по шагам что тут происходит x

:= []int{}

x = append(x, 1)
x = append(x, 2)
y := append(x, 5)
x = append(x, 4)

fmt.Println(x, y)
Вывод 124 125

x := []int{}

x = append(x, 1)
x = append(x, 2)
x = append(x, 3)
y := append(x, 5)
x = append(x, 4)

fmt.Println(x, y)
Вывод: 1234 1234

Понятно что под капотом слайса происходит увеличение cap и создание нового массива, но куда пропадает само значение 5 которое должно вставляться в новый слайс(массив)?

13 ответов

25 просмотров

Если заменить второе на x := []int{} x = append(x, 1) x = append(x, 2) x = append(x, 3) y := append(x, 5) fmt.Println(x, y) x = append(x, 4) fmt.Println(x, y) То становится ещё интересней ) // [1 2 3] [1 2 3 5] // [1 2 3 4] [1 2 3 4]

Dmitriy-Kovbasin Автор вопроса
ShiroNoHaga
Если заменить второе на x := []int{} x = append...

я же правильно понимаю что после увеличения cap они у нас должны сомтреть на разные массивы уже? )

капасити не на 1 увеличивается, подсказка =)

в 2 раза до того момента пока размер слайса не станет больше 1024 элементов, после этого будет увеличиваться примерно на 25%.

Alexey Ermakov
капасити не на 1 увеличивается, подсказка =)

SliceX - [1] lenX - 1 capX - 1 SliceX - [1 2] lenX - 2 capX - 2 SliceX - [1 2 3] lenX - 3 capX - 4 SliceX - [1 2 3] lenX - 3 capX - 4 SliceY - [1 2 3 5] lenY - 4 capY - 4 SliceX - [1 2 3 4] lenX - 4 capX - 4 SliceY - [1 2 3 4] lenY - 4 capY - 4 Это получается они смотрели на один исходный массив просто в слайсе Х 4 элемент не задействован, а в слайс У в четвертый элемент мы записали значение 5. А в последней строке мы добавили четвертое значение в слайс Х, в связи с чем оно поменялось в массиве и как результат в слайсе У. Вроде так...

Anton Russinov
в 2 раза до того момента пока размер слайса не ста...

там, вроде, “плавно” меняется размер увеличения?

Alexey Ermakov
там, вроде, “плавно” меняется размер увеличения?

c 1.18 поменяли немного этот механизм сейчас не вспомню как это сделано теперь, то что я описал было до 1.18

Anton Russinov
c 1.18 поменяли немного этот механизм сейчас не вс...

// Transition from growing 2x for small slices // to growing 1.25x for large slices. This formula // gives a smooth-ish transition between the two. newcap += (newcap + 3*threshold) / 4

Да? Цукалос писал про 1024.

Да Но это не прямая перезапись Мне кажется это разное

Похожие вопросы

Обсуждают сегодня

Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта