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.")
}