Goで基本的なWebサーバーを構築する方法

Goは、システムソフトウェアだけでなく現代のWebアプリケーションを構築するためのエキサイティングなプログラミング言語です。リリース時にテクノロジー業界を席巻し、Docker、Kubernetes、Terraform、Dropbox、Netflixなどのサービスを強化しています。

さらに、Goの組み込みパッケージの強力なコレクションにより、GoはWebプログラミングに最適です。この記事では、Goで基本的なWebサーバーを作成する方法について説明します。

必要なパッケージのインポート

net / HTTPパッケージは、Webサーバーとクライアントの作成に必要なすべてを提供します。このパッケージは、Webプログラミングを処理するためのいくつかの便利な関数を公開しています。

ソースコードの先頭に以下の行を追加することでインポートできます。

 import "net/http"

また、文字列のフォーマットにはfmtパッケージを使用し、エラーの処理にはlogパッケージを使用します。上記のように個別にインポートするか、単一のインポートステートメントを使用してすべてのパッケージを因数分解することができます。

 import (
"fmt"
"log"
"net/http"
)

必要なパッケージをインポートした後、main関数の記述に進むことができます。先に進み、 .go拡張子を付けてソースファイルを保存します。 Vimを使用している場合は、以下のコマンドを使用してVimを保存して終了ます

 :wq server.go

主な機能を書く

Goプログラムは、適切に「main」という名前のmain関数内にあります。ここでサーバー呼び出しを実装する必要があります。ソースコードに次の行を追加して、その機能を確認してください。

 func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}

funcキーワードを使用してmain関数を定義しています。 Goには、開始ブレースの配置に関して厳格な規則があるため、開始ブレースが正しい行にあることを確認してください。 mainの最初のステートメントは、ルート( "/" )パスに到達するすべてのWeb要求が、タイプhttp.HandlerFuncの関数であるインデックスによって処理されることを定義しています。

2行目は、 http.ListenAndServe関数を介してWebサーバーを起動します。これは、ホストマシンのポート8080で着信HTTP要求を継続的にリッスンするようにサーバーに通知します。この関数の2番目のパラメーターは、終了するまでプログラムをブロックするために必要です。

http.ListenAndServeは常にエラーを返すため、この呼び出しをlog.Fatal呼び出しでラップしています。このステートメントは、サーバー側で生成されたエラーメッセージをログに記録します。

ハンドラー関数の実装

ご覧のとおり、main関数は、クライアント要求を処理するためにハンドラー関数インデックスを呼び出します。ただし、サーバーに対してこの関数をまだ定義していません。

インデックス関数を使用可能にするために必要なステートメントを追加しましょう。

 func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}

この関数は、タイプhttp.ResponseWriterhttp.Requestの2つの異なる引数を取ります。 http.ResponseWriterパラメーターには、着信要求に対するサーバーの応答が含まれています。これは、http.Requestオブジェクトの形式で提供されます。

fmtパッケージのFprintf関数は、テキスト文字列の表示と操作に使用されます。これを使用して、Webリクエストに対するサーバーの応答を表示しています。最後に、 r.URL.Path [1:]コンポーネントは、ルートパスの後に続くデータをフェッチするために使用されます。

すべてのピースを一緒に追加する

すべての要素をまとめると、GoWebサーバーの準備が整います。コードは次のようになります。

 package main
import (
"fmt"
"log"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}

このGoWebサーバーコードを実行可能ファイルとしてコンパイルするには、最初の行が必要です。

GoでWebサーバーを構築する

Goの堅牢なライブラリパッケージは、初心者向けのWebプログラミングを容易にします。わずか数行のコードで、簡単なWebサーバーをすばやく開発できます。

さらに、このプログラミング言語の強力なテスト機能により、アジャイルプログラミング手法の実装も容易になります。これらは、反復型開発とチーム間の広範なコラボレーションに基づくソフトウェア開発戦略のグループです。