一尘不染

解析来自HTML的输入

go

我在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()
}

我希望有人能帮助我做的是弄清楚如何提交HTML表单以将数据发送到Golang代码。

因此,如果存在一个带有name属性的输入字段,并且该属性的值是name,并且用户在其中输入名称并提交,那么在提交的表单页面上,Golang代码将打印问候,名称。

这是我能想到的:

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()
}

这是我的hello.html文件:

在身体里:

<form action="" method="get">
    <input type="text" name="name" />
</form>

如何连接hello.htmlhello.go使Golang代码获取的是在表单提交页面输入并返回打招呼,叫什么名字?

我将不胜感激任何帮助!


阅读 200

收藏
2020-07-02

共1个答案

一尘不染

为了读取html表单值,您必须先调用r.ParseForm()。您可以获取表单值。

所以这段代码:

func hello(c web.C, w http.ResponseWriter, r *http.Request){
    name := r.PostFormValue("name")
    fmt.Fprintf(w, "Hello, %s!", name)
}

应该是这样的:

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)
}

编辑: 我应该注意,这是在学习net/http软件包时使我绊倒的一点

2020-07-02