こんにちは、daihaseです。
今日はGoを使った最も簡単なWebサーバーの構築を説明したいと思います。PHP, Java, Ruby... サーバーサイドを実装する言語は多くありますが、このGoを使ったWebサーバーの実装はその中でも最も簡単と言えるくらいです。
Goは非常に強力な言語で、標準パッケージだけでも十分Webサービスを作れてしまいます。今回はWebサーバーとして動かすためにその中の1つ、net/httpについて紹介したいと思います。
※Macなど、クライアント側に予めGoの実行環境が整っている前提です。
net/httpパッケージ
HTTPサーバーとHTTPクライアントを実装するための必要な機能をパッケージ化したものです。この標準パッケージを実装するコード上でインポートしてやるだけで、後は決まった書き方をしてやるだけで簡単にWebサーバーを立てることが出来るのです。
それでは早速実際のコードを見てみましょう。(httpSample.goとファイル名をつけています)
package main import ( "io" "log" "net/http" ) func MyHandleFunc(w http.ResponseWriter, req *http.Request) { io.WriteString(w, "hello, world!\n") } func main() { http.HandleFunc("/hello", MyHandleFunc) log.Fatal(http.ListenAndServe(":8000", nil)) }
はい、たったこれだけでWebサーバーとして動いちゃいます。 コードとしては以下のようなことを行なっています。
- /hello というルートを生成します。
- MyHandleFuncというハンドラーを生成します。
- リクエストがルート(/hello)に来るたびにハンドラ関数が実装されます。
- Hello, World! という文字列を表示するレスポンスが返ってきます。
- ポート8000でWebサーバーを立ち上げます。その際エラーがあればListenAndServeがそのログを返します。
パッとこんな感じで処理が行われます。
実際にこちらを実行してみましょう。
$ go run httpSample.go
特にターミナル上ではメッセージを出すようにもしてないので、何も動いてないようですが実際はサーバーが立ち上がっています。ブラウザで以下のURLを入力してみましょう。
http://localhost:8000/hello
ブラウザの画面に「hello, World!」と文字が表示されたはずです。 どうでしょう、呆気にとられるくらい簡単にWebサーバーが立ち上がったかと思います。
それでは良い開発ライフを〜