GO:作为Fprintf参数传递的表单值类型不正确

时间:2014-08-12 14:11:30

标签: go

我尝试使用Fprintf打印用户键入表单的用户名:

GO代码:

const logPage = `
<html>
<form action="/login" method="POST">
    <label for="name">Username</label>
        <input type="text" id="Username" name="name"></input>
    ...
</form> 
</html>
`
const homePage = `
<html>
<h1>hi %s</h1>
</html>
`

func homehandler(w http.ResponseWriter, r *http.Request) {
    a = r.FormValue("name")
    fmt.Fprintf(w, homePage, a) ---> how do I insert the a value in the required interface{} form?
}

func main() {
    http.HandleFunc("/home", homehandler)
    ...
}

根据这个:http://golang.org/pkg/net/http/#Request.FormValue,FormValue返回一个字符串,但是Fprintf似乎需要一个接口类型:http://golang.org/pkg/fmt/#Fprintf。如何插入&#34; a&#34;的正确值/类型?就像我上面的代码一样?或者,有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我实际上不确定您的代码是否可以按照您的意图运行。

这是一个略有修改的工作示例:

const logPage = `
<html>
<form action="/login" method="POST">
    <label for="name">Username</label>
        <input type="text" id="Username" name="name"></input>
    ...
</form> 
</html>
`
const homePage = `
<html>
<h1>hi %s</h1>
</html>
`


func loginhandler(w http.ResponseWriter, r *http.Request) {
  if r.Method == "GET" {
    fmt.Fprint(w, homePage)
  } else if r.Method == "POST" {
    // Here you can check the credentials
    // or print the page you wanted to
    // BUT please DON'T DO THIS
    a = r.FormValue("name")        
    fmt.Fprint(w, logpage, a)
    // DON'T DO THIS FOR THE SAKE OF YOUR USERS
  }
}

func main() {
    // http.HandleFunc("/home", homehandler) not needed
    http.HandleFunc("/login", loginhandler)
    ...
}

这是怎么回事:

  1. 用户向GET页面发出/login个请求,并调用loginHandler
  2. loginhandler中,您将登录页面html返回给用户的浏览器。
  3. 然后用户输入其数据,并发送POST请求。
  4. 在loginhandler中,请求类型之间的区别使得可以呈现表单,或显示发布的值。
  5. 但是,您应该始终清理用户数据。 template/html为您做到了,所以请看一下。如果您对该套餐的使用有其他疑问,请离开!