Добавить структуру в fasthttp.Args

Я действительно сжигаю мозговую массу, пытаясь вести этот простой разговор, но не могу найти выхода.

Подводя итог, это зацикливание структуры для использования в другой функции.

В волокне я могу разбирать queryParams

      type MyStruct struct {
    Status   string  `query:"status"`
    Price    bool    `query:"price"`
    Name     int     `query:"name"`
}

query := new(MyStruct)
if err := c.QueryParser(query); err != nil {
    panic("error")
}

На fasthttp у меня есть

      args := fasthttp.AcquireArgs()
args.Add(x, y)

Но как перенести эти поля в *Argsесли я не могу перебрать структуру? Я хочу выполнить цикл, потому что я помещу это во вспомогательную функцию, поэтому структура с 15 полями или 3 полями будет делать то, что нужно, без проблем.

Пример всего этого

      package main

import (
    "fmt"
    "log"

    "github.com/gofiber/fiber/v2"
    "github.com/valyala/fasthttp"
)

func main() {

    app := fiber.New()

    // Routes
    app.Get("/", hello)

    log.Fatal(app.Listen(":3003"))

}

type MyStruct struct {
    Status string `query:"status"`
    Price  bool   `query:"price"`
    Name   int    `query:"name"`
}

func hello(c *fiber.Ctx) error {
    query := new(MyStruct)
    if err := c.QueryParser(query); err != nil {
        panic("error")
    }

    args := fasthttp.AcquireArgs()
    args.Add("default", "value")
    args.Add("x", "y")
    
    // this I want to automate
    // args.AddInSomeWay(query)

    uri := fasthttp.AcquireURI()
    uri.SetHost("mydomain.fake")
    uri.SetScheme("https")
    uri.SetPath("my/custom/pah")
    uri.SetQueryString(args.String())

    agent := fiber.AcquireAgent()

    req := agent.Request()
    // uri.String() => https://mydomain.fake/my/custom/pah?default=value&x=y
    req.SetRequestURI(uri.String())

    if err := agent.Parse(); err != nil {
        panic(err)
    }

    _, body, _ := agent.String()

    return c.SendString(body)
}

0 ответов

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