Я пытаюсь сделать глубокую копию структуры в go. Прежде чем идти и строить решение самостоятельно, я попытался найти идиоматический способ сделать это в режиме go. Я нашел ссылку на реализацию this. Однако, похоже, он устарел и не активно поддерживается. Я уверен, что это сценарий, который люди требуют от времени от времени, поэтому я должен что-то пропускать. Есть ли у кого-нибудь указания?Сделайте копию структуры
ответ
Более позднюю версию кода google deepcopy можно найти в margnus1/go-deepcopy
.
Это иллюстрирует, почему в стандартной библиотеке нет глубокой копии.
// basic copy algorithm:
// 1) recursively scan object, building up a list of all allocated
// memory ranges pointed to by the object.
// 2) recursively copy object, making sure that references
// within the data structure point to the appropriate
// places in the newly allocated data structure.
Все алго довольно изогнуто и полагаются на отражение. И, конечно, только доступ к экспортируемой области.
// Copy makes a recursive deep copy of obj and returns the result.
//
// Pointer equality between items within obj is preserved,
// as are the relationships between slices that point to the same underlying data,
// although the data itself will be copied.
// a := Copy(b) implies reflect.DeepEqual(a, b).
// Map keys are not copied, as reflect.DeepEqual does not
// recurse into map keys.
// Due to restrictions in the reflect package, only
// types with all public members may be copied.
//
func Copy(obj interface{}) (r interface{}) {
Я уверен, что это сценарий, что люди много требуют от времени до времени, поэтому я должен быть отсутствующий что-то
Передача значений структуры, в отличие от указателей на структуру, например, в целом достаточно хороша. Если программист достаточно хорош для эффективного проектирования структур дерева или графа, то они, вероятно, могут предвидеть проблемы с совместным использованием такой структуры.
Многие из нас считают отсутствие обязательного поведения с глубоким копированием для функции, поскольку мы хотим, чтобы Go предоставил инструменты для обеспечения безопасности, а не препятствия для повышения эффективности.
Более свежая и полируется версия DeepCopy является ulule/deepcopier
// Deep copy instance1 into instance2
Copy(instance1).To(instance2)
- 1. Сделайте копию структуры parent-child в SQL
- 2. Сделайте глубокую копию словаря
- 3. Сделайте копию объекта dbcontext
- 4. Сделайте резервную копию файлов
- 5. Сделайте «копию» системы linux
- 6. Сделайте копию доски
- 7. Сделайте копию объекта anonymous thread
- 8. Сделайте глубокую копию с клоном
- 9. Сделайте копию вектора, содержащего-структуру
- 10. Создайте копию структуры AVPacket
- 11. Я получаю копию структуры здесь?
- 12. Сделайте копию существующего рабочего пространства в Perforce
- 13. Сделайте копию копии изображения другими изображениями
- 14. Сделайте копию более сжатой в Java
- 15. Сделайте копию данных, хранящихся в $ scope
- 16. Сделайте копию Datatable с некоторыми изменениями
- 17. Сделайте копию объекта внутри другого объекта. JAVASCRIPT
- 18. Сделайте копию арендатора в квартире драгоценный камень
- 19. Сделайте копию набора и исключите один элемент
- 20. Сделайте копию скопированных файлов в хрюкать
- 21. Сделайте копию строки в таблице MySQL
- 22. Сделайте вторую независимую копию данных тома EBS
- 23. Сделайте глубокую копию UIView и всех его подзонов
- 24. Сделайте резервную копию большого сайта с 100 000 + файлами/изображениями
- 25. Сделайте копию страницы aspx без ошибок с ошибками
- 26. Сделайте копию файла и дайте ему другое имя mac terminal
- 27. py2neo: Сделайте глубокую копию узла и сохраните его локально
- 28. Android Сделайте копию TableRow (виджет) в новый TableRow (виджет)
- 29. Сделайте копию файла на клиентском компьютере с веб-страницы
- 30. Сделайте копию файла и удалите строки, которые соответствуют условию?
'а: = b'? Что вы подразумеваете под глубоким копированием структуры? Глубокие указатели копий в структуре? – inf
Стандартная библиотека не содержит функции глубокой копии, поскольку существует множество вариантов того, как приложение может это сделать. Кроме того, для приложения не сложно реализовать определенную функцию копирования. Что вы хотите сделать? –