カテゴリ: Go言語 更新日: 2025/12/25

Go言語でPOSTリクエストを処理する方法とポイント

Go言語でPOSTリクエストを処理する方法とポイント
Go言語でPOSTリクエストを処理する方法とポイント

先生と生徒の会話形式で理解しよう

生徒

「先生、Go言語でフォームから送信されたPOSTリクエストはどうやって処理するんですか?」

先生

「POSTリクエストは、ユーザーがフォームに入力したデータをサーバーに送るときによく使われます。Goではhttp.Requestのメソッドを使って簡単にデータを取得できます。」

生徒

「GETリクエストとどう違うんですか?」

先生

「GETリクエストはURLにデータが付加されて送られるのに対して、POSTリクエストはHTTPの本文にデータが含まれます。つまりURLには表示されず、より安全に情報を送ることができます。」

生徒

「なるほど、パスワードのような情報もPOSTで送った方が安全なんですね!」

先生

「その通りです。では、実際にGoでPOSTリクエストを処理する基本を見ていきましょう。」

1. POSTリクエストの基本処理

1. POSTリクエストの基本処理
1. POSTリクエストの基本処理

Goでは、r.Methodを使ってリクエストの種類を確認し、POSTの場合に処理を行うことができます。フォームデータはr.FormValuer.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フォームとの連携

2. HTMLフォームとの連携
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リクエストを扱うポイント

3. POSTリクエストを扱うポイント
3. POSTリクエストを扱うポイント
  • POSTリクエストではr.ParseForm()を呼んでフォームデータを解析します。
  • ユーザーが入力するデータは信頼できないため、必ず入力チェックやサニタイズを行います。
  • 機密情報はHTTPS通信を使って送信することで安全性を高めます。
  • GETとPOSTを混同せず、用途に応じて使い分けることが重要です。
  • GoではFormValueを使うだけで、シンプルにフォームの値を取得できるため初心者でも扱いやすいです。

これらのポイントを押さえることで、Go言語で安全にPOSTリクエストを処理し、Webアプリケーションを構築できるようになります。

Go言語を基礎からスッキリ学びたい人や、 文法だけでなく「実用的な使い方」まで押さえたい人には、 定番の入門書がこちらです。

基礎からわかるGo言語をAmazonで見る

※ Amazon広告リンク

4. POSTリクエストで受け取れるデータの種類

4. POSTリクエストで受け取れるデータの種類
4. POSTリクエストで受け取れるデータの種類

Go言語で処理できるPOSTリクエストのデータは、フォームから送信されるテキスト情報だけではありません。チェックボックスやラジオボタン、隠しフィールドなど、HTMLフォームで扱えるさまざまな入力要素を受け取ることができます。

基本的な取得方法は同じで、FormValueに指定したname属性の値を渡すだけです。複数の入力項目があっても、同じ考え方で処理できます。


r.ParseForm()
email := r.FormValue("email")
remember := r.FormValue("remember")

このように、フォームの項目が増えてもコードの書き方は変わらないため、POSTリクエストの処理は拡張しやすいのが特徴です。

5. エラー処理とレスポンスの考え方

5. エラー処理とレスポンスの考え方
5. エラー処理とレスポンスの考え方

POSTリクエストを処理する際は、正常な場合だけでなく、エラーが発生した場合のレスポンスも意識することが大切です。たとえば、必須項目が未入力だった場合や、想定していない値が送られてきた場合には、適切なメッセージを返す必要があります。

Goでは、HTTPステータスコードを使って処理結果を分かりやすく伝えることができます。


if username == "" {
    w.WriteHeader(http.StatusBadRequest)
    fmt.Fprint(w, "ユーザー名を入力してください")
    return
}

このように条件分岐を入れることで、ユーザーにとって分かりやすいPOSTリクエスト処理になります。単に値を受け取るだけでなく、「正しい入力かどうか」を判断する視点が重要です。

6. POSTリクエスト処理を関数で整理する

6. POSTリクエスト処理を関数で整理する
6. POSTリクエスト処理を関数で整理する

POSTリクエストの処理が増えてくると、1つの関数にすべての処理を書くのは読みにくくなります。そのような場合は、入力チェックやデータ処理を別の関数に分けると、コード全体が整理されます。

処理の流れを小さな単位に分けることで、後から修正や機能追加をしやすくなります。


func validate(username string) bool {
    return username != ""
}

func postHandler(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()
    username := r.FormValue("username")

    if !validate(username) {
        w.WriteHeader(http.StatusBadRequest)
        fmt.Fprint(w, "入力内容が不正です")
        return
    }

    fmt.Fprint(w, "送信完了")
}

このようにPOSTリクエストの処理を整理していくと、実務で使える読みやすいGoコードに近づいていきます。

まとめ

まとめ
まとめ

POSTリクエスト処理の全体像を振り返る

この記事では、Go言語を使ってPOSTリクエストを処理する基本から、実際のWebアプリケーション開発で意識すべきポイントまでを順番に確認してきました。 POSTリクエストは、フォーム入力やログイン処理、登録画面、検索条件の送信など、実務でも頻繁に登場する重要な仕組みです。 Go言語では、net/httpパッケージを利用することで、POSTリクエストの受け取りやフォームデータの取得をシンプルなコードで実装できます。

特に重要なのは、HTTPメソッドの判定です。r.Methodを使ってPOSTかどうかを確認することで、意図しないアクセスを防ぐことができます。 また、r.ParseForm()を呼び出すことで、フォームから送信されたデータを安全に扱えるようになります。 これにより、ユーザー名やパスワード、検索条件などを確実にサーバー側で受け取ることが可能になります。

フォームデータ取得の考え方

POSTリクエストで送信されたデータは、URLではなくHTTPの本文に含まれます。 そのため、GETリクエストと比べてURLが長くならず、入力内容がブラウザの履歴やログに残りにくいという特徴があります。 Go言語では、FormValueを使うだけで簡単に値を取得できるため、初心者でも扱いやすい点が魅力です。

ただし、フォームから送られてくるデータは常に正しいとは限りません。 空文字や想定外の値、不正な文字列が送信される可能性もあるため、入力チェックやエラーハンドリングを意識することが大切です。 Webアプリケーションを安全に運用するためには、POSTリクエストの処理と同時に、データの検証を行う習慣を身につけましょう。

POST処理のシンプルなサンプルプログラム

ここで、今回学んだ内容を整理するために、POSTリクエストを処理する最小構成のサンプルをもう一度確認してみます。 フォームから送信された値を受け取り、画面に表示するだけのシンプルな例ですが、POST処理の基本が詰まっています。


package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    if r.Method != "POST" {
        w.WriteHeader(http.StatusMethodNotAllowed)
        fmt.Fprintln(w, "POSTリクエストのみ対応しています")
        return
    }

    r.ParseForm()
    name := r.FormValue("name")

    fmt.Fprintf(w, "こんにちは、%s さん", name)
}

func main() {
    http.HandleFunc("/submit", handler)
    http.ListenAndServe(":8080", nil)
}

このように、POSTリクエストの処理は「メソッド確認」「フォーム解析」「値の取得」という流れを意識すると理解しやすくなります。 実際の開発では、この処理に認証やデータベース保存、画面遷移などが追加されていきます。 まずは基本の流れをしっかり身につけることが重要です。

先生と生徒の振り返り会話

生徒

「POSTリクエストって難しそうだと思っていましたが、流れを追ってみると意外とシンプルですね。 メソッドを確認して、フォームの値を取るだけで動くのが分かりました。」

先生

「そうですね。Go言語は標準ライブラリがよく整っているので、基本的なWeb処理は短いコードで書けます。 まずはPOSTとGETの違いを正しく理解することが大切です。」

生徒

「フォームから送られるデータは信用できない、という話も印象に残りました。 入力チェックを忘れないようにしないと危ないんですね。」

先生

「その通りです。POSTリクエストは便利ですが、同時に注意点もあります。 セキュリティやデータ検証を意識しながら実装できるようになると、より実践的なGoのWeb開発ができるようになりますよ。」

生徒

「まずは今回のサンプルを自分で動かして、POST処理に慣れてみます。 そのあとにログイン機能や登録画面にも挑戦してみたいです!」

先生

「それが一番の近道ですね。実際に手を動かしながら、POSTリクエストの使い方を体で覚えていきましょう。」

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語の短絡評価(ショートサーキット)を使った条件式の工夫をやさしく解説!初心者でも理解できる基本知識
New2
Go言語
Go言語の構造体の初期化パターンとコンストラクタ的関数の書き方を徹底解説!初心者でもわかる基本と実用例
New3
Kotlin
Kotlinの例外処理とキャンセルの連携を完全ガイド!初心者でもわかるCoroutineExceptionHandlerの使い方
New4
Go言語
Go言語のクロージャとは?関数内関数の活用例と仕組み
人気記事
No.1
Java&Spring記事人気No1
Kotlin
KotlinのChannelでデータをやり取りする方法を完全ガイド!初心者にもわかる非同期通信の基本
No.2
Java&Spring記事人気No2
Go言語
Go言語でのDB接続情報を環境変数で管理する方法|初心者でも安全に設定
No.3
Java&Spring記事人気No3
Kotlin
Kotlinのビルド設定エラーと解決法まとめ!初心者向けGradleトラブル対処ガイド
No.4
Java&Spring記事人気No4
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Kotlin
Kotlinでテキスト表示・編集!初心者でもわかるTextViewとEditTextの使い方
No.7
Java&Spring記事人気No7
Kotlin
Kotlin DSLとGroovy DSLの違いをやさしく解説!初心者でもわかるGradleスクリプトの使い分け
No.8
Java&Spring記事人気No8
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方

💻 作業効率アップに

ノートPCを縦置きしてデスクを広く。
省スペースで片づく定番スタンド

UGREEN 縦型スタンドをAmazonで見る

※ Amazon広告リンク