我使用Goji框架运行了一些东西:
package main
import (
"fmt"
"net/http"
"github.com/zenazn/goji"
"github.com/zenazn/goji/web"
)
func hello(c web.C, w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %s!", c.URLParams["name"])
}
func main() {
goji.Get("/hello/:name", hello)
goji.Serve()
}
Run Code Online (Sandbox Code Playgroud)
我希望有人可以帮我做的是弄清楚提交HTML表单时如何将该数据发送到Golang代码.
因此,如果有一个带有name属性的输入字段,并且name的值是name,并且用户在那里键入一个名称并提交,那么在表单提交页面上,Golang代码将打印hello,name.
这是我能想到的:
package main
import(
"fmt"
"net/http"
"github.com/zenazn/goji"
"github.com/zenazn/goji/web"
)
func hello(c web.C, w http.ResponseWriter, r *http.Request){
name := r.PostFormValue("name")
fmt.Fprintf(w, "Hello, %s!", name)
}
func main(){
goji.Handle("/hello/", hello)
goji.Serve()
}
Run Code Online (Sandbox Code Playgroud)
这是我的hello.html文件:
在身体里:
<form action="" method="get">
<input type="text" name="name" />
</form>
Run Code Online (Sandbox Code Playgroud)
如何连接hello.html到hello.goGolang代码获取输入中的内容并在表单提交页面中返回hello,name?
我非常感谢任何帮助!
yum*_*kas 17
要读取html表单值,您必须先调用r.ParseForm().您可以获取表单值.
所以这段代码:
func hello(c web.C, w http.ResponseWriter, r *http.Request){
name := r.PostFormValue("name")
fmt.Fprintf(w, "Hello, %s!", name)
}
Run Code Online (Sandbox Code Playgroud)
应该是这样的:
func hello(c web.C, w http.ResponseWriter, r *http.Request){
//Call to ParseForm makes form fields available.
err := r.ParseForm()
if err != nil {
// Handle error here via logging and then return
}
name := r.PostFormValue("name")
fmt.Fprintf(w, "Hello, %s!", name)
}
Run Code Online (Sandbox Code Playgroud)
编辑:我应该注意到,这是在学习net/http包时绊倒我的一点
您的表单输入名称, 名称是go程序提取的关键.
<form action="" method="get">
<input type="text" name="name" />
</form>
Run Code Online (Sandbox Code Playgroud)
您可以使用FormValue https://golang.org/pkg/net/http/#Request.FormValue
FormValue返回查询的命名组件的第一个值.POST和PUT正文参数优先于URL查询字符串值.如有必要,FormValue会调用ParseMultipartForm和ParseForm,并忽略这些函数返回的任何错误.如果key不存在,FormValue将返回空字符串.要访问同一个键的多个值,请调用ParseForm,然后直接检查Request.Form.
func hello(c web.C, w http.ResponseWriter, r *http.Request){
name := r.FormValue("name")
fmt.Fprintf(w, "Hello, %s!", name)
}
Run Code Online (Sandbox Code Playgroud)
如果FormFile不起作用,最好使用ParseMultiForm https://golang.org/pkg/net/http/#Request.ParseMultipartForm
您可以使用ParseMultipartForm
ParseMultipartForm将请求主体解析为multipart/form-data.解析整个请求体,并将其文件部分的总maxMemory字节存储在内存中,其余部分存储在临时文件的磁盘上.如有必要,ParseMultipartForm会调用ParseForm.在调用ParseMultipartForm之后,后续调用无效
func hello(c web.C, w http.ResponseWriter, r *http.Request){
name := r.FormValue("name")
r.ParseMultipartForm(32 << 20)
fmt.Fprintf(w, "Hello, %s!", name)
}
Run Code Online (Sandbox Code Playgroud)
此外,除非在提交表单后进行某种处理,否则表单是无用的.所以相应地使用它.
| 归档时间: |
|
| 查看次数: |
20562 次 |
| 最近记录: |