Webサーバの作成
Go標準ライブラリのnet/httpパッケージを利用して、Webサーバを立ち上げる方法を説明します。
最初のWebサーバ
基本を理解するため、最小限のコードでWebサーバを作成します。
main.go
package main
import (
"fmt"
"net/http"
)
func main() {
// リクエストを処理する関数を登録
http.HandleFunc("/", handler)
// Webサーバの起動
// 第一引数はポート番号を指定
// 第二引数はマルチプレクサを作成した場合に指定
// (マルチプレクサについては以降のページで説明)
http.ListenAndServe(":8080", nil)
}
// リクエストを処理する関数
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World.")
}
このプログラムのポイントは次の通りです。
http.HandleFunc関数を用いて、リクエストを処理する関数(今回はhandler関数が該当)を登録するhttp.ListenAndServe関数を用いて、サーバを起動する
これだけでWebサーバの作成は完了です。 他のプログラミング言語のように、TomcatやUnicornなどのWebアプリケーションサーバを別途インストールする必要はありません。
次の手順で実際に動かしてみましょう。
- ターミナルで
go run main.goを実行してWebサーバを起動する - Webブラウザで
http://localhost:8080にアクセスする - Webブラウザに『Hello, World.』と表示されることを確認する
- ターミナルで
Ctrl + cを入力してWebサーバを終了する
Webサーバの設定
先ほどはデフォルトのサーバ設定で起動しました。
サーバの設定をするには、構造体http.Serverを使います。
そして、http.ListenAndServeの代わりにhttp.ServerのListenAndServeメソッドを利用します。
package main
import (
"fmt"
"net/http"
"time"
)
func main() {
http.HandleFunc("/", handler)
// Webサーバの設定
server := http.Server{
// ホスト名とポート番号(ホスト名は省略できる)
Addr: ":8080",
// 次のページで説明
Handler: nil,
// リクエスト読み取りのタイムアウト
ReadTimeout: 30 * time.Second,
// レスポンス書き込みのタイムアウト
WriteTimeout: 30 * time.Second,
// リクエストヘッダの最大バイト長
MaxHeaderBytes: 1 << 20,
}
server.ListenAndServe()
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World.")
}