cpp

Создание копии слайса

Если присвоить слайс другой переменной, то будут скопированы лишь поля структуры слайса, а не элементы слайса. В результате будет скопирован указатель на массив и мы просто получим два указателя на один и тот же участок памяти:

var arr1 []int = []int{10, 20, 30}
var arr2 []int = arr1
arr2[0] = 88
fmt.Println(arr1)       // [88 20 30]
fmt.Println(arr2)       // [88 20 30]

Как видно из результата, значение изменились в обоих слайсах. Но так будет не всегда. Если выполняется перераспределение памяти, то указатели будут ссылаться на разные массивы:

var arr1 []int = []int{10, 20, 30}
var arr2 []int = arr1
arr2 = append(arr2, 40, 50, 60)
arr2[0] = 88
fmt.Println(arr1)       // [10 20 30]
fmt.Println(arr2)       // [88 20 30 40 50 60]

Для копирования элементов из одного слайса в другой предназначена глобальная функция copy(). Формат функции:

copy(dst, src []Type) int

Функция копирует элементы из слайса src в dst и возвращает количество скопированных элементов. Пример создания копии слайса:

var arr1 []int = []int{10, 20, 30}
var arr2 []int = make([]int, len(arr1))
fmt.Println(copy(arr2, arr1)) // 3
arr2[0] = 88
fmt.Println(arr1)             // [10 20 30]
fmt.Println(arr2)             // [88 20 30]

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp