net/httpパッケージを使ったWebサーバー

f:id:daihase:20190809022658p:plain

こんにちは、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サーバーとして動いちゃいます。 コードとしては以下のようなことを行なっています。

 

  1. /hello というルートを生成します。
  2. MyHandleFuncというハンドラーを生成します。
  3. リクエストがルート(/hello)に来るたびにハンドラ関数が実装されます。
  4. Hello, World! という文字列を表示するレスポンスが返ってきます。
  5. ポート8000でWebサーバーを立ち上げます。その際エラーがあればListenAndServeがそのログを返します。

 

パッとこんな感じで処理が行われます。

実際にこちらを実行してみましょう。

$ go run httpSample.go

 

特にターミナル上ではメッセージを出すようにもしてないので、何も動いてないようですが実際はサーバーが立ち上がっています。ブラウザで以下のURLを入力してみましょう。

http://localhost:8000/hello

 

ブラウザの画面に「hello, World!」と文字が表示されたはずです。 どうでしょう、呆気にとられるくらい簡単にWebサーバーが立ち上がったかと思います。

それでは良い開発ライフを〜