Существует тип массива:
const Size = 16
type idType [Size]byte
и для структурных типов:
type srcListItem struct {
id idType
}
type destListItem struct {
id []byte
}
Я инициализирую список источников с двумя элементами, подобными этому:
srcList := make([]srcListItem, 2)
for i := 0; i < Size; i++ {
srcList[0].id[i] = byte(i)
srcList[1].id[i] = byte(i + Size)
}
Затем я пытаюсь скопировать его на два фрагмента типа destListItem
.При копировании одного из них я использую item, а для копирования другого индекса используется:
for i, item := range srcList {
fmt.Println("id slice: ", srcList[i].id)
item1 := destListItem {
id: item.id[:],
}
destList1 = append(destList1, item1)
item2 := destListItem {
id: srcList[i].id[:],
}
destList2 = append(destList2, item2)
}
вывод результатов печати срезов:
destList1 items array: [{[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]} {[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]}]
destList2 items array: [{[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]} {[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]}]
Скажите, пожалуйста, почему элементы в destList1содержит идентичные идентификаторы?Вот полный исходный код: https://play.golang.org/p/IJM5cllSb1B
Спасибо.
PS Я знаю некоторые обходные пути.Например, результат будет правильным в обоих случаях, если список источников будет иметь тип []*srcListItem
.Но почему это так странно работает?