Sobes.tech
Middle

Co se stane, když přidáme příliš mnoho prvků do slice uvnitř funkce?

sobes.tech AI

Odpověď od AI

V jazyce Go je slice struktura, která obsahuje ukazatel na pole, délku a kapacitu. Pokud přidáte do slice příliš mnoho prvků, překročíte jeho aktuální kapacitu, Go automaticky alokuje nové pole větší velikosti a zkopíruje do něj data.

To znamená, že při přidávání prvků se může slice přeuspořádat, což přináší dodatečné náklady na čas a paměť. Pokud přidáváte prvky do slice uvnitř funkce bez vrácení nového slice, změny nemusí být zachovány, protože slice je předáván hodnotou (struktura je kopírována, ale data nikoliv).

Příklad:

func appendElements(s []int) {
    for i := 0; i < 1000; i++ {
        s = append(s, i) // při překročení kapacity se vytvoří nový slice
    }
}

// Aby se změny zachovaly, je třeba vrátit slice:
func appendElementsCorrect(s []int) []int {
    for i := 0; i < 1000; i++ {
        s = append(s, i)
    }
    return s
}

Při přidávání velkého množství prvků je důležité vzít v úvahu přerozdělení paměti a správně pracovat s vrácenou hodnotou slice.