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 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误