カテゴリ: 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アプリケーションを構築できるようになります。

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コードに近づいていきます。

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

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

※ Amazon広告リンク

まとめ

まとめ
まとめ

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リクエストの使い方を体で覚えていきましょう。」

関連セミナーのご案内

【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導

「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。

本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。

具体的な開発内容と環境

【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。

【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。

この60分で得られる3つの理解

1. 環境構築の完全な理解

「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。

2. Go言語の基本構造(変数・型)

データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。

3. 読みやすいコードの書き方

ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。

※本講座は、将来的にバックエンドエンジニアクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。

セミナー画像

初めてのGo言語を一緒に学びましょう!

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のwhile的なforループの使い方!条件式ループの基本を解説
New2
Go言語
Go言語プログラムの実行方法まとめ!VSCode・ターミナルでの実行手順を解説
New3
Swift
Swift意味とは?プログラミング言語・金融・鳥の違いを徹底解説
New4
Swift
Swift 戻り値の扱い方と複数戻り値の返し方|初心者でも分かる関数の基本
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語でリダイレクト処理を行う方法(http.Redirect)を初心者向けに解説
No.2
Java&Spring記事人気No2
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方
No.6
Java&Spring記事人気No6
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.7
Java&Spring記事人気No7
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.8
Java&Spring記事人気No8
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説