Sobes.tech
Junior
296

Go тілінде кесімдер үшін append функциясы қалай жұмыс істейді?

AI-дан жауап

sobes.tech AI

append функциясы элементтерді кескінге қосады. Ол жаңа кескінді қайтарады, себебі бастапқы кескін өзгертілуі мүмкін.

Элементтерді қосқанда, append кескіннің ағымдағы сыйымдылығын (capacity) пайдалана алады, егер ол жеткілікті болса. Бұл жағдайда жаңа кескін сол негізгі массивке сілтеме жасайды, бірақ оның ұзындығы (length) өседі.

Егер сыйымдылық жеткіліксіз болса, append жаңа, үлкенірек негізгі массивті бөледі, оған бастапқы кескіннен элементтерді көшіреді және жаңа элементтерді қосады. Жаңа кескін осы жаңа массивке сілтеме жасайды.

Әдетте, жаңа массивтің өлшемі сыйымдылық жетіспегенде екі есе көбейтіледі, бұл болашақ қайта бөлу санын азайту үшін.

// `append` қолданудың мысалы
slice1 := []int{1, 2, 3}
fmt.Printf("Slice1: %v, Ұзындығы: %d, Қабаты: %d\n", slice1, len(slice1), cap(slice1)) // Нәтиже: Slice1: [1 2 3], Ұзындығы: 3, Қабаты: 3

// Бір элемент қосу - сыйымдылық жеткілікті
slice2 := append(slice1, 4)
fmt.Printf("Slice2: %v, Ұзындығы: %d, Қабаты: %d\n", slice2, len(slice2), cap(slice2)) // Нәтиже: Slice2: [1 2 3 4], Ұзындығы: 4, Қабаты: 6 (қабаты екі есе артты)

// Бірнеше элемент қосу
slice3 := append(slice2, 5, 6, 7)
fmt.Printf("Slice3: %v, Ұзындығы: %d, Қабаты: %d\n", slice3, len(slice3), cap(slice3)) // Нәтиже: Slice3: [1 2 3 4 5 6 7], Ұзындығы: 7, Қабаты: 12 (қабаты қайтадан екі есе артты)

// Басқа кескіннен элементтерді қосу үш нүкте ... көмегімен
slice4 := []int{8, 9}
slice5 := append(slice3, slice4...)
fmt.Printf("Slice5: %v, Ұзындығы: %d, Қабаты: %d\n", slice5, len(slice5), cap(slice5)) // Нәтиже: Slice5: [1 2 3 4 5 6 7 8 9], Ұзындығы: 9, Қабаты: 12