Edited at

Go Web Examplesの和訳(HTTP Server)

More than 1 year has passed since last update.

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


参考