事象
いつもコードを書く時に見た目がスッキリするので画面表示と内部の処理を別のメソッドで書いていたのですが
Cookieを使用する際にsetCookieの後http.redirectを使用したらCookieが登録できていなかったというものです。
ダメだったコード
main.go
package main
import (
"html/template"
"net/http"
)
func main(){
server := http.Server{
Addr: "localhost:8080",
}
http.HandleFunc("/set", setCookie)
http.HandleFunc("/cookieComp", cookieCompleteHandler)
server.ListenAndServe()
}
func setCookie(w http.ResponseWriter, r *http.Request) {
cookie := &http.Cookie{
Name: "Taro",
Value: "たなかたろうです!",
}
http.SetCookie(w, cookie)
http.Redirect(w, r, "/cookieComp", http.StatusFound)
}
func cookieCompleteHandler(w http.ResponseWriter, r *http.Request){
var templatefile = template.Must(template.ParseFiles("./cookieComplete.html"))
templatefile.Execute(w, "cookieComplete.html")
}
cookieComplete.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>team</title>
</head>
<body>
<p>cookie</p>
<p> name: {{.Name}} </p>
<p> value:{{.Value}} </p>
</body>
</html>
正しいコード
main.go
package main
import (
"html/template"
"net/http"
)
func main(){
server := http.Server{
Addr: "localhost:8080",
}
http.HandleFunc("/set", setCookie)
server.ListenAndServe()
}
func setCookie(w http.ResponseWriter, r *http.Request) {
cookie := &http.Cookie{
Name: "Taro",
Value: "たなかたろうです!",
}
http.SetCookie(w, cookie)
tmpl := template.Must(template.ParseFiles("./cookieComplete.html"))
tmpl.Execute(w, &cookie)
}
cookieComplete.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>team</title>
</head>
<body>
<p>cookie</p>
<p> name: {{.Name}} </p>
<p> value:{{.Value}} </p>
</body>
</html>
実行
runした後にlocalhost:8080/set
で動きます!