
WEBアプリ開発の一歩としてローカルサーバーを立ち上げたいんだけど…
今回はGoの標準パッケージ・net/http
を利用して、あなたのパソコンにサーバー(ローカルサーバー)を立ち上げてみましょう!
Goの基本文法だけのプログラミング学習では、プログラミングの楽しさを知ることができません。
実際にローカルサーバーを立ち上げることで、WEBアプリ開発の楽しさを知る一歩を踏み出せますよ。
net/httpを利用してローカルサーバーを立ち上げる第一歩!
Go言語ではサーバー関連の標準パッケージ・net/http
を利用することで簡単にローカルサーバーを立ち上げることができます。

立ち上げるだけだど1行のコードで大丈夫だよ!
package main
import (
"net/http"
)
func main() {
http.ListenAndServe(":8080", nil)
}
http.ListenAndServe(":8080", nil)
とmain関数内に記述しプログラムを実行するとローカルサーバーを立ち上げることができます。
// 出力結果
$ go run main.go
← カーソルが点滅もしくわ表示されたまま
実行すると出力結果には何も表示されずに、カーソルが点滅もしくわ表示されたままです。
この状態でブラウザを立ち上げて、localhost:8080
と入力してアクセスしてみましょう。


この状態でサーバーが立ち上がっています!
サーバーを終了するには、ターミナルで ctrl + c を押すことで終了します。
ブラウザに文字を表示してみよう!
これだけだと面白くないので文字を表示してみましょう。
package main
import (
"net/http"
)
type TestHandler struct{}
func (h *TestHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "ブラウザに文字を表示するテストです!")
}
func main() {
http.ListenAndServe(":8080", &TestHandler{})
}
それでは、先程と同様にターミナルでプログラムを実行してみます。

このプログラムでの理解するポイントは…
ということを押さえておきましょう。
ただ、このままの状態だと、例えば localhost:8080/top/
とアクセスしてもブラウザに表示される内容は一緒です。
URLを指定して内容を変えてみましょう。
URLを指定して表示する内容を変えてみる
それではURLを指定して表示する内容を変えてみましょう。
HTMLファイルを用意する
前準備として、今回は2つのHTMLファイルを用意します。
// index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Go Lesson! Index</title>
</head>
<body>
{{ . }}
</body>
</html>
// hello.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Go Lesson! Greetings</title>
</head>
<body>
{{ . }}
</body>
</html>
index.html
と hello.html
を用意しました。

内容は title
タグの違いだけだよ!
Goのプログラムを作成する
プログラムの内容は下記の通りです。
// main.go
package main
import (
"html/template"
"log"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
t, err := template.ParseFiles("index.html")
if err != nil {
log.Println(err)
}
t.Execute(w, "トップページです!")
}
func hello(w http.ResponseWriter, r *http.Request) {
t, err := template.ParseFiles("hello.html")
if err != nil {
log.Println(err)
}
t.Execute(w, "こんにちは!!")
}
func main() {
http.HandleFunc("/", index)
http.HandleFunc("/hello", hello)
http.ListenAndServe(":8080", nil)
}
説明の前にプログラムを実行してみましょう。
まずは、localhost:8080
にブラウザでアクセスしてみます。

続いて localhost:8080/hello
にアクセスしてみましょう。


おっ!URLを変えると表示も変わりましたね!
プログラムの流れを確認
今回のプログラムの流れを簡単にご説明いたします。
HTMLファイル内の…
<body>
{{ . }}
</body>
{{ . }}
は、GoがHTMLファイルを解析しテンプレートを作成した時に、t.Execute(w, "トップページです!")
の トップページです!
に置き換わります。
今回、HTMLファイルを2つ用意したのは、プログラムがパターン化されていることを確認してほしかったからです。
【演習】公式サイトのWriting Web Applicationsに挑戦しよう!
ローカルサーバーの演習問題に最適なのが、公式サイトに用意されている Writing Web Applications が最適です。
サイトは英語ですがGoogle翻訳を利用すれば大丈夫です。
上から順番にコードを記述していき動きを確認しながローカルサーバーの理解を深めることができます。
英語ですが臆せずに挑戦してみましょう。

Writing Web Applicationsの内容が理解できれば、この記事の内容はだいたい網羅されています。
【最後に】net/httpを利用してGoでローカルサーバーを立ち上げよう!
今回はGoの標準パッケージ・net/http
を活用してローカルサーバーを立ち上げて、URLごとに表示内容を変えるプログラムを作成しました。
プログラムがパターン化されているので、コードを書く上で自分で管理しやすいようにメモなどに残しておいても良いと思います。

今回、プログラムの内容には突っ込まないでおきました。
まずはサーバーを立ち上げて、自分で書いたGoのプログラムを実行することでブラウザに文字が表示される動きを確認してほしいと単純に思いました。
私もパソコン内でサーバーが立ち上がり、自分の書いた関数で表示が切り替わることにプログラミングの楽しさを感じたからです。
少しでも楽しさを共感してもらえれば、嬉しく思います。
comment