Sobes.tech
Junior — Middle

Какво се случва при извикване на метода append и защо той връща нов срез?

sobes.tech AI

Отговор от AI

В Go методът append се използва за добавяне на елементи към срез (slice). При извикване на append се случва следното:

  1. Ако капацитетът (capacity) на среза е достатъчен, новият елемент просто се добавя към съществуващия масив, и се връща срез, който сочи към актуализираната част от масива.
  2. Ако капацитетът не е достатъчен, се създава нов масив с увеличен капацитет, старите елементи се копират в него, и след това се добавя новият елемент.

Затова append връща нов срез, защото:

  • В случай на разширяване на капацитета, се връща срез, сочещ към новия масив.
  • Ако капацитетът е достатъчен, се връща срез, сочещ към същия масив, но с увеличена дължина.

Винаги е важно да присвоявате резултата от append обратно на променливата, за да не загубите референцията към актуализирания срез:

s := []int{1, 2, 3}
s = append(s, 4)  // s сега сочи към срез с елементите [1 2 3 4]

По този начин, append връща нов срез, защото вътрешно може да се промени базовият масив, и трябва да актуализирате референцията към него.