Все три функции возвращают производный (дочерний) Context и функцию CancelFunc(). Вызов CancelFunc() удаляет родительскую ссылку на дочернюю и останавливает все связанные с ней таймеры. В качестве побочного эффекта это означает, что сборщик мусора Go сможет свободно собрать дочерние горутины, с которыми больше не связаны родительские. Чтобы сборка мусора сработала правильно, родительская горутина должна сохранять ссылку на каждую дочернюю горутину. Если та завершается без ведома родителя, происходит утечка памяти‚ длящаяся до тех пор, пока родительская программа также не будет отменена.
Golang для профи: Создаем профессиональные утилиты, параллельные серверы и сервисы
·
Михалис Цукалос