如何使用 Golang 的 Fiber 获取查询字符串?

Eri*_*ook 6 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("%+v\n", c)
                fmt.Println("END PERCENT V")
                msg := fmt.Sprintf("%s\n", c.Params("*"))
                fmt.Println(msg)
                fmt.Println("END PARAMS *")
                fmt.Println(c.Body())
                fmt.Println("END BODY")
                fmt.Println(c)
                fmt.Println("END RAW")
Run Code Online (Sandbox Code Playgroud)

我称之为

curl 'localhost:3000/event/?a=b&b=c&d=e'
Run Code Online (Sandbox Code Playgroud)

我的输出

PATH
/event/
END PATH
#0000000100000001 - 127.0.0.1:3000 <-> 127.0.0.1:46890 - GET http://localhost:3000/event/?a=b&b=c&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=b&b=c&d=e
END RAW
Run Code Online (Sandbox Code Playgroud)

我想要的是 a=b&b=x&d=e 作为字符串或作为 json 对象。然而!该字符串没有固定的格式。它也可以很容易地变为 blah=123&blah2=234。或 x=1&somekey=somevalue

我能找到的所有文档都涉及将查询字符串转换为结构。该服务所需要做的就是将查询字符串转换为 json 并将其写入磁盘。如果我删除 ?,我可以使用 Params('*') 来获取它,但是路径会出现问题,因为我还需要单词“/event/”。而且这个值也是任意的。该服务只是将其写入磁盘并返回 200。

但我不知道如何使用 golang 的 Fiber 获取查询字符串。有办法吗?如果没有,是否有其他高效的方法可以实现这一点?

moj*_*egh 13

你可以简单地使用

app.Get("/", func(c *fiber.Ctx) {
  queryValue := c.Query("param_key")
})
Run Code Online (Sandbox Code Playgroud)

正如这里提到的


Luc*_*ama 12

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"))
}

Run Code Online (Sandbox Code Playgroud)


xpt*_*xpt 2

作为投票最高的答案来回答是错误的——现在不再起作用,并且维基链接已经过时。

最新的文档在这里。这是示例代码:

// GET http://example.com/?name=alex&want_pizza=false&id=

app.Get("/", func(c *fiber.Ctx) error {
    m := c.Queries()
    m["name"] // "alex"
    m["want_pizza"] // "false"
    m["id"] // ""
    // ...
})

Run Code Online (Sandbox Code Playgroud)