Удаление Post
Итак, мы хотим, чтобы пользователи нашего Feed могли удалять свои сообщения. Как это можно смоделировать? Если бы наш Feed был массивом, мы бы просто удалили элемент и покончили с этим, верно?
Что ж, на самом деле именно здесь связанные списки проявляют себя. Когда размеры массивов изменяются, среда выполнения должна захватывать новый блок памяти для хранения элементов массива. Связанные списки из-за своей структуры, при которой каждый элемент имеет указатель на следующий узел в списке, могут быть разбросаны по всему пространству памяти. Это означает, что добавление или удаление узлов из связанного списка дешево с точки зрения пространства. Когда кто-то хочет удалить узел, связаны должны быть только соседи удаленного узла. Языки со сборщиком мусора (такие как Go) делают это еще проще, поскольку нам не нужно беспокоиться об освобождении выделенной памяти — сборщик мусора включится и удалит все неиспользуемые объекты.
Чтобы немного облегчить нам жизнь в этом примере, давайте наложим ограничение, согласно которому в Feed каждый из элементов Post будет иметь уникальный publishDate. Это означает, что издатель может создавать один элемент Post в секунду в своем Feed. Принимая это во внимание, вот как мы можем легко удалить Post из Feed:

Функция Remove примет publishDate из Post в качестве аргумента, с помощью которого она определит, какой Post нужно удалить (или связь с каким Post нужно отменить). Функция довольно маленькая. Если она обнаружит, что элемент start Feed должен быть удален, то просто переназначит его start Feed второму элементу Post в Feed. В противном случае она перескакивает через каждый из Post’ов в Feed, пока не наткнется на Post, который соответствует тому publishDate, который был передан в качестве аргумента функции. Когда функция найдет и удалит нужный Post, она просто соединит предыдущий и следующий Post’ы.
Есть один случай, в котором нам нужно убедиться, что мы покрываем нашу функцию Remove: что если у Feed нет Post с указанным publishDate? Для простоты функция проверяет отсутствие элемента next Post в Feed перед переходом к нему. Если next это nil, то вызовется panic, сообщающая нам, что она не может найти Post с таким publishDate.