カテゴリ: Go言語 更新日: 2026/01/29

Go言語のWebサーバーを簡単に作成するサンプルコード解説

Go言語のWebサーバーを簡単に作成するサンプルコード解説
Go言語のWebサーバーを簡単に作成するサンプルコード解説

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

生徒

「先生、Go言語で簡単にWebサーバーを作ることはできますか?」

先生

「もちろんできます。Goは標準ライブラリにnet/httpが用意されているので、少ないコードでWebサーバーを立ち上げられます。」

生徒

「具体的にどんなコードになるんですか?」

先生

「それでは、基本的なサンプルを使って説明しますね。」

1. Go言語でWebサーバーを作る基本

1. Go言語でWebサーバーを作る基本
1. Go言語でWebサーバーを作る基本

GoでWebサーバーを作るためには、http.HandleFuncを使ってルートパスと処理を紐づけ、http.ListenAndServeでサーバーを起動します。これだけでブラウザからアクセスできるサーバーが完成します。


package main

import (
    "fmt"
    "net/http"
)

func helloHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "こんにちは、Go言語のWebサーバーです!")
}

func main() {
    http.HandleFunc("/", helloHandler)
    fmt.Println("サーバーを起動します。ポート:8080")
    http.ListenAndServe(":8080", nil)
}

このコードでは、ブラウザでhttp://localhost:8080にアクセスすると、「こんにちは、Go言語のWebサーバーです!」という文字が表示されます。非常にシンプルですが、基本のWebサーバーとして動作します。

2. ルート以外のページも作れる

2. ルート以外のページも作れる
2. ルート以外のページも作れる

Webサイトでは複数のページを持つことが多いですが、Goではルートごとに処理を簡単に追加できます。


func aboutHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "これはGo言語の紹介ページです。")
}

func main() {
    http.HandleFunc("/", helloHandler)
    http.HandleFunc("/about", aboutHandler)
    fmt.Println("サーバーを起動します。ポート:8080")
    http.ListenAndServe(":8080", nil)
}

このように/aboutのURLにアクセスすると、別のページ内容を表示できます。ルーティングを簡単に追加できるのがGoの特徴です。

3. POSTリクエストやフォームデータの処理

3. POSTリクエストやフォームデータの処理
3. POSTリクエストやフォームデータの処理

Webアプリケーションではユーザーがフォームを送信するケースが多いです。Goではr.Methodでリクエストの種類を確認し、r.FormValueでフォームデータを取得します。


func formHandler(w http.ResponseWriter, r *http.Request) {
    if r.Method == "POST" {
        r.ParseForm()
        name := r.FormValue("name")
        fmt.Fprintf(w, "送信された名前: %s", name)
    } else {
        fmt.Fprintf(w, "<form method='post'><input name='name'><input type='submit'></form>")
    }
}

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

このコードでは、ブラウザで/formにアクセスするとフォームが表示され、入力後に送信するとサーバー側でデータを受け取れます。

4. Webサーバー作成のポイント

4. Webサーバー作成のポイント
4. Webサーバー作成のポイント
  • Goの標準ライブラリだけで簡単にWebサーバーを構築可能。
  • http.HandleFuncでURLごとに処理を紐づける。
  • http.ListenAndServeでサーバーを起動、ポート番号を指定する。
  • フォームやPOSTリクエストもr.FormValueで簡単に扱える。
  • 開発中はlocalhostで確認、公開する場合はサーバーやクラウド環境が必要。

これらのポイントを押さえることで、Go言語でシンプルなWebサーバーを作り、さらにページ追加やフォーム処理などを応用できるようになります。

5. レスポンスヘッダーを設定する

5. レスポンスヘッダーを設定する
5. レスポンスヘッダーを設定する

Go言語のWebサーバーでは、レスポンスとして返す内容だけでなく、HTTPヘッダーも簡単に設定できます。 ヘッダーは、ブラウザに対して「どんな種類のデータを返すか」を伝える重要な情報です。 特にHTMLを返す場合は、文字コードやコンテンツの種類を明示しておくと安心です。


func headerHandler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "text/html; charset=utf-8")
    w.Write([]byte("<h1>ヘッダー設定のサンプル</h1>"))
}

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

この例では、Content-Typeを指定してHTMLとして表示されるようにしています。 ブラウザで/headerにアクセスすると、見出しが正しく表示されます。 ヘッダー設定は、Webサーバーの基本として覚えておきたいポイントです。

6. クエリパラメータを使ったリクエスト処理

6. クエリパラメータを使ったリクエスト処理
6. クエリパラメータを使ったリクエスト処理

URLの末尾に付けるクエリパラメータを使うと、簡単なデータをサーバーに渡すことができます。 Go言語ではr.URL.Query()を使って、その値を取得できます。 動作確認や簡単な条件分岐を学ぶのにちょうど良い仕組みです。


func queryHandler(w http.ResponseWriter, r *http.Request) {
    name := r.URL.Query().Get("name")
    if name == "" {
        name = "ゲスト"
    }
    fmt.Fprintf(w, "こんにちは、%s さん", name)
}

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

/query?name=太郎のようにアクセスすると、名前を使った表示に切り替わります。 フォーム処理の前段階として、URLとリクエストの関係を理解するのに役立ちます。

7. Webサーバー開発でよくあるつまずきポイント

7. Webサーバー開発でよくあるつまずきポイント
7. Webサーバー開発でよくあるつまずきポイント

Go言語でWebサーバーを作り始めたばかりの頃は、いくつか共通したつまずきがあります。 しかし、原因を知っておけば落ち着いて対処できます。 初心者がよく間違えやすい点を整理しておきましょう。

  • ポート番号がすでに使われていてサーバーが起動しない
  • URLの末尾スラッシュの違いでアクセスできない
  • ブラウザを更新しても表示が変わらない
  • ハンドラ関数が正しく登録されていない

エラーが出た場合は、まずターミナルの表示を確認し、URLやポート番号を見直してみてください。 GoのWebサーバーは構造がシンプルなので、一つずつ確認すれば原因を見つけやすいのが特徴です。 小さな成功体験を積み重ねながら、少しずつ理解を深めていきましょう。

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

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

※ Amazon広告リンク

まとめ

まとめ
まとめ

Go言語でWebサーバーを作る流れの振り返り

この記事では、Go言語を使ってWebサーバーを作成するための基本から、少し実践的な使い方までを順番に学んできました。 最初は「Go言語で本当にWebサーバーが作れるのか」という疑問から始まり、標準ライブラリであるnet/httpを使えば、 特別なフレームワークを使わなくても、非常にシンプルなコードでWebサーバーを起動できることを確認しました。 http.HandleFunchttp.ListenAndServeという二つの要素があれば、 ブラウザからアクセスできるサーバーがすぐに完成する点は、Go言語の大きな魅力です。

次に、ルートパスだけでなく、/aboutのようにURLごとに処理を分ける方法を学びました。 WebサイトやWebアプリケーションでは複数のページを持つのが一般的ですが、 Go言語ではURLと処理を一対一で結び付けるだけなので、構造がとても分かりやすくなります。 この仕組みを理解しておくことで、ページを増やしたり、機能を追加したりする際も迷いにくくなります。

さらに、フォーム送信やPOSTリクエストの処理についても確認しました。 r.Methodでリクエストの種類を判定し、r.FormValueで送信された値を受け取ることで、 ユーザー入力を扱う基本的なWebアプリケーションの動きが実現できます。 フォーム処理は難しく感じがちですが、Go言語では必要な処理がシンプルにまとまっているため、 初心者でも仕組みを理解しやすいのが特徴です。

レスポンスやリクエストの扱い方を理解する

Webサーバーでは、表示する内容だけでなく、レスポンスヘッダーやリクエスト情報を正しく扱うことも重要です。 記事の中では、Content-Typeを設定してHTMLとして返す方法や、 クエリパラメータを使ってURLから値を受け取る方法も紹介しました。 これらは一見すると細かい部分に思えますが、実際のWeb開発では頻繁に使われる基本要素です。

特にクエリパラメータは、URLと処理の関係を理解するうえでとても良い練習になります。 ブラウザのアドレスバーに入力した内容が、そのままサーバー側の処理に影響を与える流れを体験することで、 Webの仕組み全体が立体的に見えてくるようになります。

まとめとしてのサンプルプログラム

ここまで学んだ内容を踏まえて、非常にシンプルなWebサーバーのサンプルを改めて載せておきます。 このコードは、トップページを表示しつつ、Webサーバーの基本構造を確認するためのものです。


package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintln(w, "Go言語でWebサーバーを作成する基本サンプルです")
    })

    fmt.Println("Webサーバーを起動しました :8080")
    http.ListenAndServe(":8080", nil)
}

このプログラムを実行し、ブラウザでhttp://localhost:8080にアクセスすると、 Go言語で作成したWebサーバーが実際に動いていることを確認できます。 「自分の書いたコードがブラウザに表示される」という体験は、 Web開発を学ぶうえで非常に大きな一歩になります。

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

生徒

「最初は難しそうだと思っていましたが、Go言語なら思ったより簡単にWebサーバーが作れるんですね。 URLと処理を結び付ける仕組みも分かりやすかったです。」

先生

「そうですね。Go言語のWebサーバーは構造がとてもシンプルなので、 Webの基本的な仕組みを学ぶのに向いています。 まずは今回の内容をしっかり理解することが大切です。」

生徒

「フォーム処理やクエリパラメータも、実際に動かしてみるとイメージしやすかったです。 次はHTMLやCSSと組み合わせて、もう少し画面を作ってみたいです。」

先生

「それは良い流れですね。Webサーバーの基礎が分かれば、 次は画面表示やデータの受け渡しなど、できることがどんどん増えていきます。 今日学んだ内容を土台にして、少しずつ実践を重ねていきましょう。」

関連セミナーのご案内

【超入門】ゼロから始める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の演算子一覧と使い方!算術・比較・論理演算子の基本を解説