我正在尝试构建一个简单的两个HandlerWeb 服务器。在第一个处理程序中,我从两个字段中提取值,即用户的名字和姓氏。在第二个处理程序中,我只是说,"Hello" (first name, last name).我放了一个fmt.Println, 似乎我没有正确地将信息从第一个拉Handler回到 Go 编程中。这哪里出错了?package mainimport ( "fmt" "html/template" "log" "net/http")type Field struct { Firstname string Secondname string}func RootHandler(w http.ResponseWriter, r *http.Request) { tmpl, err := template.ParseFiles("index.html") if err != nil { fmt.Println("Index Template Parse Error: ", err) } err = tmpl.Execute(w, nil) if err != nil { fmt.Println("Index Template Execution Error: ", err) }}func main() { http.HandleFunc("/", RootHandler) // sets router http.HandleFunc("/welcome", WelcomeHandler) err := http.ListenAndServe(":4000", nil) // set listen port if err != nil { log.Fatal("ListenAndServe: ", err) }}func WelcomeHandler(w http.ResponseWriter, r *http.Request) { Firstname := r.FormValue("Namef") Secondname := r.FormValue("Namel") fmt.Println(Firstname) f := new(Field) f.Firstname = Firstname f.Secondname = Secondname fmt.Println(*f) tmpl, err := template.ParseFiles("tmpl/welcome.tmpl") if err != nil { fmt.Println("Index Template Parse Error: ", err) } err = tmpl.Execute(w, &f) if err != nil { fmt.Println("Index Template Execution Error: ", err) }}这是index.html我从中提取两个值的:<!DOCTYPE html><html><body><form action="/welcome" method="post"><p> Welcome! First I will need your full name: </p>First Name: <input type="text" id="Namef" name="FirstName"><br>Last Name: <input type="text" id="Namel" name="LastName" ><br><input type="submit" value="Next"></form><p>Click the "Submit" button and the form-data will be sent to a page on the server called "demo_form.asp".</p></body></html>
1 回答
拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
问题是您尝试使用错误的名称获取表单值。
name
您必须使用您在 HTML 文档中用作属性的值,而不是id
!
Firstname := r.FormValue("FirstName") Secondname := r.FormValue("LastName")
这可能只是您的练习代码,但绝不会在处理程序中解析模板。解析模板是一项相对占用资源的任务,您应该只执行一次,并且由于模板可以安全地并发使用,您可以使用template.Template
来自多个 goroutine 的单个值(服务并发请求)。
- 1 回答
- 0 关注
- 140 浏览
添加回答
举报
0/150
提交
取消