0

1)通过模板方法渲染一个登录页面。例如:这是 index.html

{{ define "title" }}Guestbook{{ end }}

    {{ define "content" }}
        <form action="/login" method="post">
          <div><label>UserName : </label><input name="username" type="text" /></div>
          <div><label>Password : </label><input name="password" type="password" /></div>
          <div><input type="submit" value="login"></div>
        </form>

    {{ end }}

2) hello.go 文件:

package main

import (
  "fmt"
  "html/template"
  "net/http"
)

var index = template.Must(template.ParseFiles(
  "templates/base.html",
  "templates/index.html",
))
type UserLogin struct{
    UserName string
    PassWord string
}


func handler(w http.ResponseWriter, r *http.Request) {  
    index.Execute(w, nil)    
}



/*func login(w http.ResponseWriter, r *http.Request) {  
        remPartOfURL := r.URL.Path[len("/login/"):] 
        if r.Method == "POST" {
           fmt.Fprintf(w, "after",r.FormValue("username"))       
        }   
        fmt.Fprintf(w, "Hello %s!", remPartOfURL)
    }*/
    func login(w http.ResponseWriter, r *http.Request) {    
        fmt.Fprint(w, "login : ", "\n")
    remPartOfURL := r.URL.Path[len("/login/"):]     
    if r.Method == "POST" {         
        g := UserLogin{
            UserName: r.FormValue("username"),
            PassWord: r.FormValue("password"),
        }
        fmt.Fprint(w, "&g : ", &g,"\n")  
    } 
    fmt.Fprintf(w, "Hello %s!", remPartOfURL)   
   }


func init() {
    http.HandleFunc("/", handler)
    http.HandleFunc("/login/", login)
}

问题:点击登录按钮后:&g 应该打印用户名和密码值,但显示为空:&g : &{ } 可以做什么?

4

1 回答 1

0

您可能会尝试的一件事是用fmt.Fprintf语句替换http.Error语句。

例如替换:

fmt.Fprintf(w, "after",r.FormValue("username"))

和:

http.Error(w, fmt.Sprintf("after %s", r.FormValue("username")), http.StatusOK)

您正在直接写入http.ResponseWriter可能会导致问题的地方。

于 2013-06-18T09:36:18.243 回答