Из вашего вопроса и ссылки на пример @Masklinn. Я вижу, что вы устанавливаете значение с помощью * указателя (адрес, на который указывает указатель), что означает, что значение этого адреса устанавливается на новое значение.
Нет ничего общего с
copy
Что делает именно то, что означает. И в этом случае он клонирует значение указателей полей, которое указывает на адрес значений полей.
Проблема заключается в способе использования и установки значения указателей.
Есть 3 способа избежать проблемы, о которой вы упоминали.
- Напишите свой собственный фрагмент клона, который инициирует новые структуры, и клонируйте только значения из исходного фрагмента в новый.
- Все еще используете клон, но когда вы установите значение полей, установите указатели полей на новый адрес. Указатели элементов других слайсов по-прежнему указывают на старое значение.
- Не используйте указатель, если у вас нет особых причин.
Вы можете сослаться на мой код, который демонстрация моего ответа.
https://play.golang.org/p/-pIgEDEr-hI
Ссылка на указатель, которая указывает непосредственно на то, как использовать указатель. https://tour.golang.org/moretypes/1