登录
首页 >  Golang >  Go问答

比较:r.PostFormValue("key")和r.PostForm.Get("key") 的最佳使用方法

来源:stackoverflow

时间:2024-03-23 13:09:31 355浏览 收藏

当使用 Go 的 `http.Request` 读取表单数据时,有两种方法:`r.PostFormValue()` 和 `r.PostForm.Get()`。它们都会返回相同的值,但主要区别在于 `r.PostForm` 是否自动填充。`r.PostForm` 是一个表单数据的映射,需要通过调用 `r.ParseMultipartForm()` 或 `r.ParseForm()` 来填充。`r.PostFormValue()` 会在必要时自动调用这些函数,而 `r.PostForm.Get()` 则假定表单数据已经填充。因此,如果您已经解析了表单数据,建议使用 `r.PostForm.Get()`。

问题内容

当我查看如何读取表单数据的示例时,我发现了两种读取帖子表单值的方法:

使用 r.postformvalue()

username := r.postformvalue("username")
password := r.postformvalue("password")

使用 r.postform.get()

username := r.PostForm.Get("username")
password := r.PostForm.Get("password")

为什么要使用其中一种而不是另一种?


正确答案


Request.PostFormValue()Request.PostForm.Get()返回相同的值,主要区别是Request.PostForm不会自动填充。

Request.PostForm 是表单数据的映射,通过调用 Request.ParseMultipartForm()Request.ParseForm() 填充。这不会自动发生,因为这需要读取和解析请求正文,而这可能并非在所有情况下都需要。

Request.PostFormValue() 如有必要(如果之前未调用),会调用 ParseMultipartForm()ParseForm() 以确保填充 Request.PostFormRequest.PostFormselector,表示 RequestPostForm 字段,因此,它不涉及调用 ParseForm()。它假设您已经这样做了。如果没有,任何 PostForm.Get() 调用都会“默默地”返回一个空字符串。

因此,如果您已经解析了表单数据(例如,通过显式调用 Request.ParseForm() 或通过先前的 Request.PostFormValue() 调用间接调用),则应仅使用 Request.PostForm.Get()

以上就是《比较:r.PostFormValue("key")和r.PostForm.Get("key") 的最佳使用方法》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>