亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何為 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 關注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號