gpt4 book ai didi

html - Golang,不从 HTML 传递值

转载 作者:IT王子 更新时间:2023-10-29 00:58:45 24 4
gpt4 key购买 nike

我正在尝试构建一个简单的、包含两个Handler 的网络服务器。在第一个处理程序中,我从两个字段中提取值,即用户的名字和姓氏。在第二个处理程序中,我只是简单地说,"Hello"(first name, last name)

我已经放置了一个 fmt.Println,但似乎我没有正确地将第一个 Handler 中的信息拉回到 Go 编程中。这是哪里出了问题?

package main

import (
"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>

最佳答案

问题是您尝试使用错误的名称获取表单值。

您必须使用在 HTML 文档中用作 name 属性的值,而不是 id!

Firstname := r.FormValue("FirstName")
Secondname := r.FormValue("LastName")

这可能只是您的练习代码,但绝不会在处理程序中解析模板。解析模板是一项相对资源密集型的任务,您应该只执行一次,并且由于模板可以安全地同时使用,您可以使用单个 template.Template来自多个 goroutines 的值(服务并发请求)。有关详细信息,请参阅此问题:It takes too much time when using "template" package to generate a dynamic web page to client in golang

关于html - Golang,不从 HTML 传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39148884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com