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}
TA贡献1943条经验 获得超7个赞
不幸的是,Go 不支持开箱即用的可选参数。我看到你正在使用 Gin,你可以使用
abc := ABC{}
if body, err := c.GetRawData(); err == nil {
json.Unmarshal(body, abc)
}
这会将请求中未传递的字段的值设置为零值。然后您可以继续将值设置为所需的值。
- 2 回答
- 0 关注
- 126 浏览
添加回答
举报