7

Go / Gin Gonic を使用して、HTML フォームから Post 値の配列を取得しようとしています。PHP では、次のようなものを使用します。

<form method="POST" enctype="multipart/form-data" action="mygo">
 <input type=hidden name="emails[]" value="email1@email.com">
 <input type=hidden name="emails[]" value="email2@email.com">
 <input type=hidden name="emails[]" value="email3@email.com">
</form>

ただし、これは Gin Gonic (または Go) では機能しないようです。

私も試しました:

<form method="POST" enctype="multipart/form-data" action="mygo">
 <input type=hidden name="emails" value="email1@email.com">
 <input type=hidden name="emails" value="email2@email.com">
 <input type=hidden name="emails" value="email3@email.com">
</form>

c.PostForm("emails")他の場所と同様に、これを行うとスライスが返されることが示唆されています。ただし、実際には、これは代わりに最後の値を文字列として返すようです:(

興味深いことに、が最初に呼び出されたc.Request.PostForm場合でも、空のマップを返します。c.Request.ParseForm()私は何を間違っていますか?

フォームに移動:

func main() {
// ...
    router.POST("mygo",parseFunc)
}

func mygo(c *gin.Context) {
  c.Request.ParseForm()
  log.Printf("%v",c.Request.PostForm["emails"]) // ""
  log.Printf("%v",c.PostForm("emails") // "email3@email.com"
}
4

4 に答える 4

7

それを機能させるには、ここに2つの方法があります

<form method="POST" enctype="multipart/form-data" action="mygo">
 <input type=hidden name="emails" value="email1@email.com">
 <input type=hidden name="emails" value="email2@email.com">
 <input type=hidden name="emails" value="email3@email.com">
</form>

r.POST("/", func(c *gin.Context) {
        c.Request.ParseMultipartForm(1000)
        for key, value := range c.Request.PostForm {
            fmt.Println(key,value)
        }
    })

また

    <form method="POST" action="mygo">
     <input type=hidden name="emails" value="email1@email.com">
     <input type=hidden name="emails" value="email2@email.com">
     <input type=hidden name="emails" value="email3@email.com">
    </form>

 r.POST("/", func(c *gin.Context) {
            c.Request.ParseForm()
            for key, value := range c.Request.PostForm {
                fmt.Println(key,value)
            }
        })

どちらも同じ結果になります

emails [email1@email.com email2@email.com email3@email.com]
于 2016-10-12T18:34:40.733 に答える
0

5年ほど遅れていることはわかっていますが、これも探していたので、答えを共有すれば誰かの役に立つと思います。

最も簡単な方法の1つは次のとおりです。

HTMLで

<form method="POST" enctype="multipart/form-data" action="mygo">
 <input type=hidden name="emails[]" value="email1@email.com">
 <input type=hidden name="emails[]" value="email2@email.com">
 <input type=hidden name="emails[]" value="email3@email.com">
</form>

GOで:

emails, ok := c.Request.PostForm["emails[]"]
if ok {
    fmt.Println("this are your emails: ", emails)
}

于 2021-08-24T12:21:35.107 に答える