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

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

Echo 框架 Bind() html FormData

Echo 框架 Bind() html FormData

Go
長風秋雁 2023-06-05 09:10:53
我有一個像這樣的表單 html:<input name="email"type="email" /><input name="password"type="password" /><input name="tags[name][]"type="text" /><input name="tags[count][]"type="number" /><input name="tags[name][]"type="text" /><input name="tags[count][]"type="number" /><input name="tags[name][]"type="text" /><input name="tags[count][]"type="number" /><input name="freeword[]"type="text" /><input name="freeword[]"type="text" />我想要Bind()這樣的表格struct:type UserFrom struct {? Email string `json:"email" form:"email" query:"email"`? Password string `json:"password" form:"password" query:"password"`? Tags []Tag? Free []string `json:"freeword[]" form:"freeword[]" query:"freeword[]"`}type Tag struct {? Name string `json:"tags[name][]" form:"tags[name][]" query:"tags[name][]"`? Count string `json:"tags[count][]" form:"tags[count][]" query:"tags[count][]"`}但是如果我打印我Bind()之后的結果:POSTu := new(UserFrom)if err = c.Bind(u); err != nil {? return}log.Println(u)這個糟糕的輸出:&{[email protected] pwdpwdpwd [] [word1 word2]}Tags []Tag結構中的行UserFrom不起作用如果你嘗試更改Tags []Tag為Tags Tag我有一個很好的最后一個條目&{[email protected] pwdpwdpwd {tag3 3} [word1 word2]}我想要這個輸出:&{[email protected] pwdpwdpwd [{tag1 1} {tag2 2} {tag3 3}] [word1 word2]}你知道這個問題嗎?Echo Doc 綁定()
查看完整描述

1 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

有兩個問題:

  1. 您沒有正確指定表單輸入名稱,您擁有它們的方式永遠無法映射到您想要的任何語言。在支持您想要的語言中,它將標簽映射到兩個字段(名稱和計數)的結構,每個字段由一個數組組成。不是名稱和計數結構的數組。名稱應該是這樣的tags[][name],以實現你想要的。

  2. 即使您按照上述正確指定了名稱,它也不會在 Echo 中工作,因為它依賴于http.Request.Form解析值,這實際上url.Values只是一個map[string][]string.?如您所見,這不可能捕獲您想要的結構。

現在,僅僅因為 Echo 不支持開箱即用,并不意味著您不能這樣做。您可以使用具有所需功能的第三方庫進行綁定,

以下代碼:

package main


import (

? ? "fmt"

? ? "net/url"


? ? "github.com/monoculum/formam"

)


type User struct {

? ? Email,

? ? Password string

? ? Tags []struct {

? ? ? ? Tag? ?string

? ? ? ? Count int

? ? }

}


func main() {

? ? formData := "[email protected]&Password=secret&Tags[0].Tag=red&" +?

? ? ? ? "Tags[0].Count=1&Tags[1].Tag=blue"

? ? q, _ := url.ParseQuery(formData)

? ? u := new(User)


? ? dec := formam.NewDecoder(nil)

? ? if err := dec.Decode(q, u); err != nil {

? ? ? ? fmt.Println(err)

? ? ? ? return

? ? }


? ? fmt.Println(u)

}

結果是你需要的:


&{[email protected] secret [{red 1} {blue 0}]}

希望這可以幫助!


查看完整回答
反對 回復 2023-06-05
  • 1 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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