この例では、Goで基本的なHTTPサーバーを作成する方法を学びます。まず、HTTPサーバーがどのような機能を持つべきかについて説明します。基本的なHTTPサーバーには、いくつかの重要な役割があります。
net/http
パッケージには、リクエストを受け入れて動的に処理するために必要なすべてのユーティリティが含まれています。 http.HandleFunc
関数を使用して、新しいハンドラを登録できます。最初のパラメータには一致するパスを、2番目のパラメータには実行する関数を指定します。この例では、誰かがあなたのウェブサイト(http://example.com/
)を閲覧すると、素敵なメッセージが表示されます。
http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Welcome to my website!")
})
動的な側面については、http.Request
にリクエストとそのパラメータに関するすべての情報が含まれています。GETパラメータはr.URL.Query().Get("token")
、POSTパラメータ(HTMLフォームのフィールド)はr.FormValue("email")
で読み取ることができます。
JavaScript、CSS、画像などの静的アセットを配信するには、組み込みのhttp.FileServer
を使用して、URLパスを指定します。ファイルサーバーが正しく機能するためには、ファイルの配信元を知る必要があります。これは次のように行うことができます。
fs := http.FileServer(http.Dir("static/"))
ファイルサーバーが配置されたら、動的リクエストの場合と同様に、URLパスを指定するだけです。注意点として、ファイルを正しく配信するには、URLパスの一部を削除する必要があります。通常、これはファイルが置かれているディレクトリの名前です。
http.Handle("/static/", http.StripPrefix("/static/", fs))
基本的なHTTPサーバーを完成させる最後のステップは、インターネットからの接続を受け入れるためにポートでリッスンすることです。ご想像のとおり、Goには組み込みのHTTPサーバーもあり、すぐに起動できます。起動したら、ブラウザでHTTPサーバーを確認できます。
http.ListenAndServe(":80", nil)
この例で学んだことを試すために使用できる完全なコードです。
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Welcome to my website!")
})
fs := http.FileServer(http.Dir("static/"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
http.ListenAndServe(":80", nil)
}