Go 言語による基本的な HTTP サーバ

GolangGolangBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Go言語のnet/httpパッケージを使って基本的なHTTPサーバを書く能力をテストすることを目的としています。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/NetworkingGroup(["Networking"]) go/NetworkingGroup -.-> go/http_server("HTTP Server") subgraph Lab Skills go/http_server -.-> lab-15482{{"Go 言語による基本的な HTTP サーバ"}} end

HTTPサーバ

2つのルート:/hello/headers を処理できる簡単なHTTPサーバを書くように求められています。/hello ルートは単純な "hello" レスポンスを返す必要があり、/headers ルートはすべてのHTTPリクエストヘッダを返す必要があります。

  • サーバは net/http パッケージを使用する必要があります。
  • /hello ルートは "hello" レスポンスを返す必要があります。
  • /headers ルートはすべてのHTTPリクエストヘッダを返す必要があります。
  • サーバはポート 8090 で待ち受ける必要があります。
## サーバをバックグラウンドで実行します。
$ go run http-servers.go &

## `/hello` ルートにアクセスします。
$ curl localhost:8090/hello
hello

以下が完全なコードです:

// `net/http` パッケージを使えば、基本的なHTTPサーバを書くのは簡単です。
package main

import (
	"fmt"
	"net/http"
)

// `net/http` サーバにおける基本的な概念は
// *ハンドラ* です。ハンドラは `http.Handler` インターフェイスを実装するオブジェクトです。
// ハンドラを書く一般的な方法は、適切なシグネチャの関数に対して `http.HandlerFunc` アダプタを使うことです。
func hello(w http.ResponseWriter, req *http.Request) {

	// ハンドラとして機能する関数は
	// `http.ResponseWriter` と `http.Request` を引数に取ります。
	// レスポンスライタはHTTPレスポンスを埋めるために使用されます。
	// ここでの単純なレスポンスはただ "hello\n" です。
	fmt.Fprintf(w, "hello\n")
}

func headers(w http.ResponseWriter, req *http.Request) {

	// このハンドラは、すべてのHTTPリクエストヘッダを読み取り、
	// それらをレスポンスボディにエコーすることで、もう少し洗練されたことを行います。
	for name, headers := range req.Header {
		for _, h := range headers {
			fmt.Fprintf(w, "%v: %v\n", name, h)
		}
	}
}

func main() {

	// サーバルートにハンドラを登録する際には、
	// `http.HandleFunc` という便利な関数を使います。
	// これは `net/http` パッケージ内の *デフォルトルータ* を設定し、
	// 関数を引数に取ります。
	http.HandleFunc("/hello", hello)
	http.HandleFunc("/headers", headers)

	// 最後に、ポートとハンドラを指定して `ListenAndServe` を呼び出します。
	// `nil` は、先ほど設定したデフォルトルータを使用することを示しています。
	http.ListenAndServe(":8090", nil)
}

まとめ

この実験では、2つのルート:/hello/headers を処理できる簡単なHTTPサーバを書くように求められました。各ルート用のハンドラを書き、サーバに登録する方法を学びました。最後に、サーバを起動して着信リクエストを待ち受ける方法を学びました。