Дано минимальный http-сервер, листенер(net.Listener) запускается в main пакете. Теперь хочется сделать так что-бы по вызову определенного url сервер останавливался, т.е. вызывался listener.stop()
Окей, делаем http.HandleFunc. В хендлер(лежит в другом пакете) уходит 2 переменных - респонсер и реквест, никаких ссылок на main. Вопрос - Как дотянуться до листенера в main-пакете?
Вопрос не о том, как извернуться в данном случае. Понятно что можно хендлер разместить в том же пакете и спокойно дернуть функцию остановки, вероятно можно вынести листенер из мэйна в отдельный пакет, который можно будет дернуть из пакете хендлера и опять же дотянуться до метода остановки.
Вопрос собственно сводится к тому, как передать "команду" (вызов функции) в main-пакет из других пакетов?
Создавайте в функции main канал и передавайте его в хендлер при создании последнего.
Вы сможете читать из канала в main и писать в него из пакета хендлера и наоборот.
А как его передать в хендлер?) собственно наибольшие вопросы вызывает именно процесс обмена данными хендлер<->main-пакет.
Параметр произвольный в хендлер, насколько я вижу, передать нельзя.
Остается вариант с "импортом" main-пакета в пакет хендлера с последующим получением "переменной" канала. НО компилятор упорно сообщает мне что main-пакет нельзя импортировать, поскольку это программа а не импортируемый пакет.
Multigame: замыкание же, в чем проблема? на примере echo
app.GET("/test", func(ctx echo.Context) error { // "подписка" в main пакете
// handlerFromAnotherPackage это хэндлер из другого пакета, там просто добавить параметр канала, main_ch инициализированный в main и который передается в хэндлер вторым параметром,
return handlerFromAnotherPackage(ctx, main_ch)
})