Cookieをセットし、Nameを指定してセットしたCookieを取得する例です。
func main() {
http.HandleFunc("/", set)
http.HandleFunc("/read", read)
http.Handle("/favicon.ico", http.NotFoundHandler())
http.ListenAndServe(":8080", nil)
}
func set(w http.ResponseWriter, req *http.Request) {
http.SetCookie(w, &http.Cookie{
Name: "name",
Value: "some-cookie",
Path: "/", // ルートディレクトリを指定し、全てのディレクトリでCookieをサーバに送信できるようにする
})
}
func read(w http.ResponseWriter, req *http.Request) {
c, err := req.Cookie("name") // nameをキーにして、クライアントから送信されたCookieを取得
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
fmt.Fprintln(w, c)
}
http.CookieにはもちろんMaxAgeやDomain、SecureなどCookieに関するフィールドが用意されています。
RequestからCookieを取得する際のエラーハンドリングですが、
次のように、「その名前のCookieが存在しない」エラーに限定して処理を書くことができます。
...
c, err := req.Cookie("name")
if err == http.ErrNoCookie {
...
}
...