刚开始学GO,遇到这样的情况:
t, err := template.ParseFiles("/template/login.tpl")
err = t.Execute(w, nil) //如果先执行
http.SetCookie(。。。)//失败,浏览器无法收到cookie
如果调换顺序,先setCookie,再Execute,便可成功设置cookie。
计划是在登陆页面login.tpl,ParseForm( )获取用户名和密码,验证合格以后才发放sessionID,如果反着写,虽然也能办到,但ParseForm( )和验证环节跑到了模板Execute前面:
r.ParseForm( ) //模板还未加载,先ParseForm( )居然也成功通过
email := r.FormValue("email")
pass := r.FormValue("pass")
var loginPass = checkLogin(email, pass) //验证用户名和密码
if loginPass == true { //用户名密码正确
cookie1 := http.Cookie{Name: "test", Value: "testvalue", Path: "/", MaxAge: 86400}
http.SetCookie(w, &cookie1) //成功设置cookie
fmt.Println("登录成功: ", email)
} else {
fmt.Println("请登录: ", email)
}
t, err := template.ParseFiles("/template/login.tpl")
err = t.Execute(w, nil) //模板必须放到后面加载
请问为什么必须这样反着写啊?
初学GO,多谢大家的关注,还请不吝赐教!
有疑问加站长微信联系(非本文作者)