Как разделить серверный контекст между пакетами

Я очень новичок в использовании волокна, и мне сложно создать сервер в пакете, а затем поделиться контекстом в другом пакете.

      // 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 после того, как вы все настроите.

Другие вопросы по тегам