技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

Cookieの読み書き【Go】

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 {
        ...
}
...