最佳实践:r.PostFormValue("key") VS r.PostForm.Get("key")
Best Practice: r.PostFormValue("key") VS r.PostForm.Get("key")
当我查看如何读取表单数据的示例时,我遇到了两种读取 post 表单值的方法:
使用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()
and Request.PostForm.Get()
return是相同的值,主要区别是Request.PostForm
不会自动填充。
Request.PostForm
是表单数据的映射,通过调用Request.ParseMultipartForm()
or Request.ParseForm()
填充。这不会自动发生,因为这需要读取和解析请求正文,并且在所有情况下都不需要这样做。
Request.PostFormValue()
会在必要时调用 ParseMultipartForm()
和 ParseForm()
(如果之前未调用过)以确保填充 Request.PostForm
。 Request.PostForm
是一个 selector 表示 Request
的 PostForm
字段,因此,它不涉及调用 ParseForm()
。它假设您已经完成了。如果没有,任何 PostForm.Get()
调用都将“静默”return 一个空字符串。
因此,如果您已经解析了表单数据(例如,通过显式调用 Request.ParseForm()
或通过先前的 Request.PostFormValue()
调用间接调用),您应该只使用 Request.PostForm.Get()
。
当我查看如何读取表单数据的示例时,我遇到了两种读取 post 表单值的方法:
使用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()
and Request.PostForm.Get()
return是相同的值,主要区别是Request.PostForm
不会自动填充。
Request.PostForm
是表单数据的映射,通过调用Request.ParseMultipartForm()
or Request.ParseForm()
填充。这不会自动发生,因为这需要读取和解析请求正文,并且在所有情况下都不需要这样做。
Request.PostFormValue()
会在必要时调用 ParseMultipartForm()
和 ParseForm()
(如果之前未调用过)以确保填充 Request.PostForm
。 Request.PostForm
是一个 selector 表示 Request
的 PostForm
字段,因此,它不涉及调用 ParseForm()
。它假设您已经完成了。如果没有,任何 PostForm.Get()
调用都将“静默”return 一个空字符串。
因此,如果您已经解析了表单数据(例如,通过显式调用 Request.ParseForm()
或通过先前的 Request.PostFormValue()
调用间接调用),您应该只使用 Request.PostForm.Get()
。