Go言語でPOSTリクエストを処理する方法とポイント
先生と生徒の会話形式で理解しよう
生徒
「先生、Go言語でフォームから送信されたPOSTリクエストはどうやって処理するんですか?」
先生
「POSTリクエストは、ユーザーがフォームに入力したデータをサーバーに送るときによく使われます。Goではhttp.Requestのメソッドを使って簡単にデータを取得できます。」
生徒
「GETリクエストとどう違うんですか?」
先生
「GETリクエストはURLにデータが付加されて送られるのに対して、POSTリクエストはHTTPの本文にデータが含まれます。つまりURLには表示されず、より安全に情報を送ることができます。」
生徒
「なるほど、パスワードのような情報もPOSTで送った方が安全なんですね!」
先生
「その通りです。では、実際にGoでPOSTリクエストを処理する基本を見ていきましょう。」
1. POSTリクエストの基本処理
Goでは、r.Methodを使ってリクエストの種類を確認し、POSTの場合に処理を行うことができます。フォームデータはr.FormValueやr.ParseForm()を使って取得します。
package main
import (
"fmt"
"net/http"
)
func postHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
r.ParseForm()
username := r.FormValue("username")
password := r.FormValue("password")
fmt.Fprintf(w, "ユーザー名: %s, パスワード: %s", username, password)
} else {
w.WriteHeader(http.StatusMethodNotAllowed)
fmt.Fprintf(w, "POSTメソッドのみ対応しています")
}
}
func main() {
http.HandleFunc("/login", postHandler)
http.ListenAndServe(":8080", nil)
}
この例では、ユーザー名とパスワードをフォームから受け取り、サーバー上で表示しています。POST以外のリクエストは拒否しています。
2. HTMLフォームとの連携
以下のHTMLフォームからデータを送信することで、先ほどのGoコードで受け取ることができます。
<form action="/login" method="post">
<label for="username">ユーザー名:</label>
<input type="text" id="username" name="username"><br>
<label for="password">パスワード:</label>
<input type="password" id="password" name="password"><br>
<input type="submit" value="送信">
</form>
フォームのmethod="post"を指定することで、データがPOSTリクエストとしてサーバーに送信されます。
3. POSTリクエストを扱うポイント
- POSTリクエストでは
r.ParseForm()を呼んでフォームデータを解析します。 - ユーザーが入力するデータは信頼できないため、必ず入力チェックやサニタイズを行います。
- 機密情報はHTTPS通信を使って送信することで安全性を高めます。
- GETとPOSTを混同せず、用途に応じて使い分けることが重要です。
- Goでは
FormValueを使うだけで、シンプルにフォームの値を取得できるため初心者でも扱いやすいです。
これらのポイントを押さえることで、Go言語で安全にPOSTリクエストを処理し、Webアプリケーションを構築できるようになります。