Goはバッテリー込みのプログラミング言語であり、Webサーバーがすでに組み込まれています。標準ライブラリのnet/http
パッケージには、HTTPプロトコルに関するすべての機能が含まれています。これには、(他にも多くのものがありますが)HTTPクライアントとHTTPサーバーが含まれます。この例では、ブラウザで表示できるWebサーバーを作成するのがいかに簡単かを知ることができます。
まず、ブラウザ、HTTPクライアント、またはAPIリクエストからのすべての受信HTTP接続を受け取るハンドラを作成します。Goのハンドラはこのシグネチャを持つ関数です。
func (w http.ResponseWriter, r *http.Request)
関数は2つのパラメータを受け取ります
http.ResponseWriter
です。http.Request
です。デフォルトのHTTPサーバーにリクエストハンドラを登録するのは、これと同じくらい簡単です。
http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, you've requested: %s\n", r.URL.Path)
})
リクエストハンドラだけでは、外部からのHTTP接続を受け入れることはできません。HTTPサーバーは、リクエストハンドラに接続を渡すためにポートでリッスンする必要があります。ポート80はほとんどの場合HTTPトラフィックのデフォルトポートであるため、このサーバーもポート80でリッスンします。
次のコードは、GoのデフォルトHTTPサーバーを起動し、ポート80で接続を待機します。ブラウザでhttp://localhost/
に移動すると、サーバーがリクエストを処理していることがわかります。
http.ListenAndServe(":80", nil)
これは、この例で学んだことを試すために使用できる完全なコードです。
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, you've requested: %s\n", r.URL.Path)
})
http.ListenAndServe(":80", nil)
}