英文:
How to add optional parameter for 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,omitempty"`
}
我想让 Age
字段是可选的。所以当我在请求体中不传递它时,它仍然可以正常工作。
英文:
Here is my code
ABC:= model.ABC{}
if err := c.Bind(&ABC); err != nil {}
c
is echo.Context
Here is my model:
type ABC struct {
Name string `json:"name"`
Age int `json:"int"`
}
I want the Age
optional. So when I do not pass it in the body request. It still works.
答案1
得分: 4
你可以尝试以下代码:
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}
英文:
You can try:
type ABC struct {
Name string `json:"name"`
Age *int `json:"int"`
}
And remember check it before you use Age
field:
a := ABC{}
// ...
if a.Age != nil {
// Do something you want with `Age` field
}
Here is my demo for this question:
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}
答案2
得分: 1
很抱歉,Go语言默认不支持可选参数。我看到你正在使用Gin框架,你可以使用以下代码:
abc := ABC{}
if body, err := c.GetRawData(); err == nil {
json.Unmarshal(body, abc)
}
这将把请求中未传递的字段的值设置为零值。然后,你可以根据需要设置这些字段的值。
英文:
Unfortunately, Go does not support optional parameters out of the box. I see that you are using Gin, you can use
abc := ABC{}
if body, err := c.GetRawData(); err == nil {
json.Unmarshal(body, abc)
}
This will set the value of the fields not passed in the request to zero values. You can then proceed to set the values to whatever is required.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论