duanji1056 2019-01-28 12:29
浏览 60
已采纳

回声框架Bind()html FormData

I have a Form html like :

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

I want to Bind() this form with my struct like :

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][]"`
}

But if i print the result of Bind() after POST i have :

u := new(UserFrom)
if err = c.Bind(u); err != nil {
  return
}
log.Println(u)

This bad Output :

&{email@mail.tld pwdpwdpwd [] [word1 word2]}

The row Tags []Tag in UserFrom struct does not work

If y try to change Tags []Tag to Tags Tag i have a good last entry

&{email@mail.tld pwdpwdpwd {tag3 3} [word1 word2]}

I want this output :

&{email@mail.tld pwdpwdpwd [{tag1 1} {tag2 2} {tag3 3}] [word1 word2]}

do you have an idea of the problem ?

Echo Doc to Bind()

  • 写回答

2条回答 默认 最新

  • dp709369831 2019-01-29 06:17
    关注

    Thx @alexaandru for your reply,

    I have update form fields to :

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

    And i have create a simple for

    u := new(UserForm)
    if err := c.Bind(u); err != nil {
    
    }
    
    fiels, _ := c.FormParams()
    var tags []Tag
    var tag Tag
    for i := 0; i < len(fiels["tags[]tag"]); i++ {
        count, _ := strconv.Atoi(fiels["tags[][count]"][i])
    
        tag.Name = fiels["tags[][name]"][i]
        tag.Comment = count
    
        tags = append(tags, tag)
    
    }
    
    u.Tags = tags
    log.Println(u)
    

    I have nice output :

    &{email@mail.tld pwdpwdpwd [{tagX 1} {tagY 2} {tagZ 3}] [wordX wordY]}
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么