Go勉強会 Webアプリケーション編 #1で使おうと思っているGo Web Examplesの和訳です。ほぼGoogle翻訳ですが、リンク等も整理された状態であると便利だと思い作りました。前回(Hello World)、次回(Routing)。
はじめに
この例では、Goで基本的なHTTPサーバーを作成する方法を学習します。最初に、HTTPサーバーの機能について説明しましょう。基本的なHTTPサーバーには、いくつかの重要な仕事があります。
-
動的なリクエストの処理:ウェブサイトを閲覧したり、アカウントにログインしたり、画像を投稿したりするユーザーからの受信リクエストを処理します。
-
静的なアセットの配信:JavaScript、CSS、および画像をブラウザに配信して、ユーザーにダイナミックなエクスペリエンスを提供します。
-
接続を受け入れる:インターネットからの接続を受け入れるには、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にはリクエストに関するすべての情報とそのパラメータが含まれています。 r.URL.Query()を使用してGETパラメータを読み取ることができます。r.FormValue("email")を使用して、POSTパラメータ(HTMLフォームのフィールド)を取得します。
静的アセットの配信
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)
}