Как разделить серверный контекст между пакетами
Я очень новичок в использовании волокна, и мне сложно создать сервер в пакете, а затем поделиться контекстом в другом пакете.
// package main
func init() {
// Init server
globs.InitServer()
}
func main() {
globs.Server.Get("/hello", handlers.HelloWorld)
}
и я инициализирую сервер как;
// package globs
// global vars
var (
Conf map[string]string
DBPool *pgxpool.Pool
Loggi *zap.Logger
Server *fiber.App
)
func InitServer() {
srv := fiber.New()
srv.Use(logger.New())
Server = srv
Server.Listen(":3000")
}
Наконец, я пытаюсь обрабатывать контроллеры как;
// package handlers
func HelloWorld(c *fiber.Ctx) error {
globs.Loggi.Info("Says Hello")
return c.SendString("Hello, World 👋!")
}
Я не получаю никаких ошибок во время компиляции, и приложение запускается нормально, но не распознает никаких маршрутов. Если я перейду к "/ hello", он выдаст 404 и покажет "Cannot GET /hello"
1 ответ
Решение
Вы звоните в
init
функция.
Server.Listen
не возвращается, пока не произойдет сбой прослушивания, поэтому вам нужно переместить его в конец main после того, как вы все настроите.