Go言語のWebサーバーを簡単に作成するサンプルコード解説
生徒
「先生、Go言語で簡単にWebサーバーを作ることはできますか?」
先生
「もちろんできます。Goは標準ライブラリにnet/httpが用意されているので、少ないコードで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. ルート以外のページも作れる
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リクエストやフォームデータの処理
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サーバー作成のポイント
- Goの標準ライブラリだけで簡単にWebサーバーを構築可能。
http.HandleFuncでURLごとに処理を紐づける。http.ListenAndServeでサーバーを起動、ポート番号を指定する。- フォームやPOSTリクエストも
r.FormValueで簡単に扱える。 - 開発中は
localhostで確認、公開する場合はサーバーやクラウド環境が必要。
これらのポイントを押さえることで、Go言語でシンプルなWebサーバーを作り、さらにページ追加やフォーム処理などを応用できるようになります。
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. クエリパラメータを使ったリクエスト処理
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サーバー開発でよくあるつまずきポイント
Go言語でWebサーバーを作り始めたばかりの頃は、いくつか共通したつまずきがあります。 しかし、原因を知っておけば落ち着いて対処できます。 初心者がよく間違えやすい点を整理しておきましょう。
- ポート番号がすでに使われていてサーバーが起動しない
- URLの末尾スラッシュの違いでアクセスできない
- ブラウザを更新しても表示が変わらない
- ハンドラ関数が正しく登録されていない
エラーが出た場合は、まずターミナルの表示を確認し、URLやポート番号を見直してみてください。 GoのWebサーバーは構造がシンプルなので、一つずつ確認すれば原因を見つけやすいのが特徴です。 小さな成功体験を積み重ねながら、少しずつ理解を深めていきましょう。
まとめ
Go言語でWebサーバーを作る流れの振り返り
この記事では、Go言語を使ってWebサーバーを作成するための基本から、少し実践的な使い方までを順番に学んできました。
最初は「Go言語で本当にWebサーバーが作れるのか」という疑問から始まり、標準ライブラリであるnet/httpを使えば、
特別なフレームワークを使わなくても、非常にシンプルなコードでWebサーバーを起動できることを確認しました。
http.HandleFuncとhttp.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つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!