multipart2.go:

package main

import (
	"github.com/gin-gonic/gin"
)

func main() {
	router := gin.Default()
	router.POST("/form_post", func(c *gin.Context) {
		message := c.PostForm("message")
		nick := c.DefaultPostForm("nick", "anonymous")

		c.JSON(200, gin.H{
			"status":  "posted",
			"message": message,
			"nick":    nick,
		})
	})
	router.Run(":8080")
}

使用 c.PostForm 方法可以直接获取表单字段,而不必事先声明结构体。如果不存在这个字段,则返回空字符串。

使用 c.DefaultPostForm 方法获取表单字段时,如果字段不存在,将返回给定的默认值。这里要注意,只有表单不包括这个字段时才会返回默认值;如果字段为空字符串,返回的就是空字符串而不是默认值。

测试:

$ curl --form message=hello --form nick=hi http://localhost:8080/form_post
{"message":"hello","nick":"hi","status":"posted"}

$ curl --form message=hello --form nick= http://localhost:8080/form_post
{"message":"hello","nick":"","status":"posted"}

$ curl --form message=hello http://localhost:8080/form_post
{"message":"hello","nick":"anonymous","status":"posted"}