HTTPサーバー

こんにちは、Philippです!
私のプラットフォームであるGo Web Examples Coursesが、ちょうどローンチしました。GoでのWeb開発に関する分かりやすいビデオコースをお楽しみください。早期サポーター向けの特別オファーをぜひチェックしてみてください。
そちらでお会いしましょう!:)
詳細はこちら

はじめに

この例では、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にリクエストとそのパラメータに関するすべての情報が含まれています。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)
}