如何为 echo.Bind 添加可选参数?

这是我的代码


ABC:= model.ABC{}

if err := c.Bind(&ABC); err != nil {}

c是 echo.Context


这是我的模型:


type ABC struct {

    Name string `json:"name"`

    Age  int    `json:"int"`

}

我想要Age可选的。所以当我不在正文请求中传递它时。它仍然有效。


开心每一天1111
浏览 130回答 2
2回答

白板的微信

你可以试试:type ABC struct {    Name string  `json:"name"`    Age  *int    `json:"int"`}并记住在使用Age字段之前检查它:a := ABC{}// ...if a.Age != nil { // Do something you want with `Age` field}这是我对这个问题的演示:package mainimport (    "net/http"    "github.com/labstack/echo/v4")type User struct {    Name  string `json:"name"`    Email *int   `json:"email"`}func main() {    e := echo.New()    e.POST("/", func(c echo.Context) error {        // return c.String(http.StatusOK, "Hello, World!")        u := new(User)        if err := c.Bind(u); err != nil {            return err        }        return c.JSON(http.StatusOK, u)    })    e.Logger.Fatal(e.Start(":1323"))}go run main.go➜  curl -X POST http://localhost:1323 \  -H 'Content-Type: application/json' \  -d '{"name":"Joe"}'{"name":"Joe","email":null}➜  curl -X POST http://localhost:1323 \  -H 'Content-Type: application/json' \  -d '{"name":"Joe", "email": 11}'{"name":"Joe","email":11}

杨__羊羊

不幸的是,Go 不支持开箱即用的可选参数。我看到你正在使用 Gin,你可以使用abc := ABC{}if body, err := c.GetRawData(); err == nil {        json.Unmarshal(body, abc)}这会将请求中未传递的字段的值设置为零值。然后您可以继续将值设置为所需的值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go