Как мне получить строку запроса, используя волокно Golang?

# #go #fibers

Вопрос:

Мой код

    app.Get("/event/*", func(c *fiber.Ctx) error {

                // GET THE ACCOUNT FROM THE PATH
                fmt.Println("PATH")
                fmt.Println(c.Path())
                fmt.Println("END PATH")
                fmt.Printf("% vn", c)
                fmt.Println("END PERCENT V")
                msg := fmt.Sprintf("%sn", c.Params("*"))
                fmt.Println(msg)
                fmt.Println("END PARAMS *")
                fmt.Println(c.Body())
                fmt.Println("END BODY")
                fmt.Println(c)
                fmt.Println("END RAW")
 

Я называю это

 curl 'localhost:3000/event/?a=bamp;b=camp;d=e'
 

Мой вывод

 PATH
/event/
END PATH
#0000000100000001 - 127.0.0.1:3000 <-> 127.0.0.1:46890 - GET http://localhost:3000/event/?a=bamp;b=camp;d=e
END PERCENT V


END PARAMS *
[]
END BODY
#0000000100000001 - 127.0.0.1:3000 <-> 127.0.0.1:46890 - GET http://localhost:3000/event/?a=bamp;b=camp;d=e
END RAW
 

Что мне нужно, так это
a=bamp;b=xamp;d=e в виде строки или в виде объекта json. Однако! Для этой строки не существует фиксированного формата. с таким же успехом это может быть бла=123 и бла 2=234. или x=1 и somekey=какое-то значение

Все документы, которые я могу найти, включают превращение строки запроса в структуру. Все, что нужно сделать этой службе, — это преобразовать строку запроса в json и записать ее на диск. Если я отброшу ?, я могу использовать параметры (‘*’), чтобы получить его, но тогда путь проблематичен, потому что мне также нужно слово «/событие/». И это значение также произвольно. Эта служба просто записывает его на диск и возвращает 200.

Но я не могу понять, как получить строку запроса, используя волокно голанга. Есть ли способ? Если нет, есть ли какой-то другой эффективный способ получить это?

Ответ №1:

fiber использует fasthttp .

 package main

import (
    "fmt"
    "log"

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

func main() {
    app := fiber.New()

    app.Get("/", func (c *fiber.Ctx) error {
        fmt.Println(string(c.Request().URI().QueryString()))
        return c.SendString("Hello, World!")
    })

    log.Fatal(app.Listen(":3000"))
}