为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
开心每一天1111 2022-12-19 17:49:28
这是我的代码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可选的。所以当我不在正文请求中传递它时。它仍然有效。
查看完整描述

2 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

你可以试试:


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 main


import (

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


查看完整回答
反对 回复 2022-12-19
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

不幸的是,Go 不支持开箱即用的可选参数。我看到你正在使用 Gin,你可以使用


abc := ABC{}

if body, err := c.GetRawData(); err == nil {

        json.Unmarshal(body, abc)

}

这会将请求中未传递的字段的值设置为零值。然后您可以继续将值设置为所需的值。


查看完整回答
反对 回复 2022-12-19
  • 2 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信