我是Golang的新手,我正在尝试将数据从动作字段移动到结构。
我的功能主要是:
func main () {
http.HandleFunc("/public/", func (w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, r.URL.Path[1:]) })
http.HandleFunc("/public/new_user/", signup)
http.ListenAndServe(":8080", nil)
}
// struct for recieving Signup data input from signup.html
type Signup struct {
name string
email string
}
// func to receive data into struc above FROM signup.html
func signup(w http.ResponseWriter, r *http.Request) {
var S Signup
S.name = r.FormValue("name")
S.email = r.FormValue("email")
//this is just to test the output
fmt.Println("%v\n", S.name)
fmt.Println("%v\n", S.email)
}
我有http.HandleFunc("public/new_user/", signup)
应该呈现signup
功能。但是,当我路由到public/new_user
而不是从func注册接收结构时,我收到一个BLANK html页面。
上面的S.name = r.FormValue("name")
和S.email = r.FormValue("email")
行从注册页面获取信息:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Sign Up</title>
</head>
<body>
<h1>Sign Up</h1>
<br/>
<form action="/public/new_user" method="post" id="form1">
<label>Name:</label>
<input type="string" name="name" />
</br>
</br>
<label>Email:</label>
<input type="string" name="email" />
</form>
</br>
<button type="submit" form="form1" value="Submit">Submit</button>
</body>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</html>
如您所见,此页面在提交后路由到public/new_user
。任何人都可以告诉我为什么public/new_user
看到我public/new_user
{/ 1}}的原因是空白的。
http.HandleFunc("/public/new_user/", signup)
哪个应该呈现注册功能?感谢
答案 0 :(得分:1)
第一个问题是您为模式<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/imageView2"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/imageView2"
android:layout_alignBottom="@+id/imageView2"
android:text="New Text" />
</RelativeLayout>
注册了处理程序,但是您将表单帖子指向"/public/new_user/"
。
您必须更改HTML /public/new_user
才能使用此网址:
<form>
这一点的重要性在于,即使访问网址<form action="/public/new_user/" method="post" id="form1">
是有效的,因为会发生自动重定向(/public/new_user
响应),但是当您的浏览器生成时,提交的表单不会被“传输”对新URL的第二个请求(以斜杠结尾)。
执行此操作后,您仍然会收到一个空白页面,因为您的301 Moved permanently
功能没有写任何回复(尽管您现在可以在控制台上看到提交和打印的表单数据)。
如果您想查看回复,请写一些内容或重定向到另一个页面。
另请注意,fmt.Println()
没有格式字符串参数,只打印传递给它的所有内容。如果要使用格式字符串,请使用fmt.Printf()
。您还可以使用signup()
格式字符串打印带有字段名称的完整结构。
例如:
%+v
答案 1 :(得分:0)