Junior — Middle
Какво се случва при извикване на метода append и защо той връща нов срез?
sobes.tech AI
Отговор от AI
В Go методът append се използва за добавяне на елементи към срез (slice). При извикване на append се случва следното:
- Ако капацитетът (capacity) на среза е достатъчен, новият елемент просто се добавя към съществуващия масив, и се връща срез, който сочи към актуализираната част от масива.
- Ако капацитетът не е достатъчен, се създава нов масив с увеличен капацитет, старите елементи се копират в него, и след това се добавя новият елемент.
Затова append връща нов срез, защото:
- В случай на разширяване на капацитета, се връща срез, сочещ към новия масив.
- Ако капацитетът е достатъчен, се връща срез, сочещ към същия масив, но с увеличена дължина.
Винаги е важно да присвоявате резултата от append обратно на променливата, за да не загубите референцията към актуализирания срез:
s := []int{1, 2, 3}
s = append(s, 4) // s сега сочи към срез с елементите [1 2 3 4]
По този начин, append връща нов срез, защото вътрешно може да се промени базовият масив, и трябва да актуализирате референцията към него.