LINUX.ORG.RU

История изменений

Исправление grossws, (текущая версия) :

Проведение, конечно, документированное (хотя и неявно), но для человека который не до конца осознал, что:

  • срез — это эффективно указатель, размер и максимальный размер;
  • всё в го передаётся по значению, как в си (передача по указателю рассматривается как передача значения указателя);
  • append, если хватает места, расширяет slice in-place.

Такое поведение (затирание «несвязанного» среза) будет неприятными сюрпризом. Правда, если между этими действиям не произошла релокация среза x, тогда не затрёт. Причём обосновывать это явностью операции выделения памяти не получится, append сам неявно выделяет память и копирует нижележащий массив, если не хватает capacity.

Также стоит сказать, что append де-факто является generic-методом, которые, якобы, сложные. И является built-in'ом, т.к. в библиотеке его не реализуешь из-за отсутствия generics. Зато работа с interface{} столь проста и удобна, что рекомендуется как единственный, подчас нерабочий, метод написания обобщенных алгоритмов.

Исходная версия grossws, :

Проведение, конечно, документированное (хотя и неявно), но для человека который не до конца осознал, что: - срез — это эффективно указатель, размер и максимальный размер; - всё в го передаётся по значению, как в си (передача по указателю рассматривается как передача значения указателя); - append, если хватает места, расширяет slice in-place. Такое поведение (затирание «несвязанного» среза) будет неприятными сюрпризом. Правда, если между этими действиям не произошла релокация среза x, тогда не затрёт. Причём обосновывать это явностью операции выделения памяти не получится, append сам неявно выделяет память и копирует нижележащий массив, если не хватает capacity.

Также стоит сказать, что append де-факто является generic-методом, которые, якобы, сложные. И является built-in'ом, т.к. в библиотеке его не реализуешь из-за отсутствия generics. Зато работа с interface{} столь проста и удобна, что рекомендуется как единственный, подчас нерабочий, метод написания обобщенных алгоритмов.