ホーム プログラミング言語 golang golang interface Go言語はWebサーバーを実装します






Go言語はWebサーバーを実装します




 
 
Go 言語は完全な net/http パッケージを提供しており、これを使用して実行可能な Web サーバーを簡単に構築できます。同時に、net/http パッケージを使用すると、Web ルーティング、静的ファイル、テンプレート、Cookie などのデータを簡単に設定および操作できます。

 

Web サーバーの仕組み

私たちが通常 Web を閲覧するときは、ブラウザを開き、URL を入力して閲覧したいコンテンツを表示します。この一見単純なプロセスの背後には、非常に複雑な操作が隠されています。

通常のインターネット アクセス プロセスでは、システムは実際に次のことを行います。

  • ブラウザ自体がクライアントであり、ブラウザに URL (URL) を入力すると、ブラウザはまず DNS サーバーに要求し、DNS を通じて対応するドメイン名に対応する IP を取得し、IP アドレスを通じて対応するサーバーを見つけます。 TCP 接続の確立を要求します。
  • サーバーとの接続を確立した後、ブラウザは HTTP リクエスト (リクエスト) パッケージをサーバーに送信します。
  • リクエスト パケットを受信した後、サーバーはリクエスト パケットの処理を開始し、独自のサービスを呼び出して、HTTP 応答 (応答) パケットを返します。
  • サーバーから応答を受信した後、クライアントは応答パケット内の本文のレンダリングを開始し、すべてのコンテンツを受信した後にサーバーとの TCP 接続を切断します。
 

上の図から、Web サーバーの動作原理は次のように簡単に要約できます。

  • クライアントは、TCP/IP プロトコルを通じてサーバーとの TCP 接続を確立します。
  • クライアントは、HTTP プロトコル要求パケットをサーバーに送信し、サーバー内のリソース ドキュメントを要求します。
  • サーバーは HTTP プロトコル応答パケットをクライアントに送信します。要求されたリソースに動的言語コンテンツが含まれている場合、サーバーは動的言語の解釈エンジンを呼び出して「動的コンテンツ」を処理し、処理されたデータをクライアントに返します。
  • クライアントはサーバーから切断され、クライアントは HTML ドキュメントを解釈し、クライアント画面にグラフィカルな結果を表示します。

簡単なWebサーバーを構築する

Web サーバーの動作原理は前に簡単に紹介しましたが、Go 言語で Web サーバーを構築するにはどうすればよいでしょうか?サンプルコードは次のとおりです。

package main

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

func main() {
    http.HandleFunc("/", index) // index はurlにリクエストが送信されたときに呼び出される関数です
    log.Fatal(http.ListenAndServe("localhost:8000", nil))
}

func index(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "IT基礎")
} 

go runコマンドを使用して上記のコードを実行します。

go run main.go

実行後、プロンプト メッセージは表示されませんが、コマンド ライン ウィンドウが占有されます (他のコマンドは入力できません)。この時点で、ブラウザに「localhost:8000」と入力すると、次の図に示す内容が表示されます。これは、サーバーが正常に実行されたことを意味します。

ヒント: Web サーバーを実行するとコマンド ライン ウィンドウが占有されます。Ctrl+C キーの組み合わせを使用して終了できます。

上記のコードは Web サーバーの単純なアプリケーションを示しているだけです。これを改良して、このサーバーのページを追加し、アクセス ルートを設定しましょう。

まず、html ファイルを準備し、index.html という名前を付けます。コードは次のとおりです。

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>IT基礎</title>
</head>
<body>
    <h1>IT基礎</h1>
</body>
</html> 

次に、上で書いた Web サーバーのコードを次のように変更するだけです。

package main

import (
    "io/ioutil"
    "log"
    "net/http"
)

func main() {
    // /の後ろにindexを追加して、アクセスパスを指定します。
    http.HandleFunc("/index", index)
    log.Fatal(http.ListenAndServe("localhost:8000", nil))
}

func index(w http.ResponseWriter, r *http.Request) {
    content, _ := ioutil.ReadFile("./index.html")
    w.Write(content)
} 

go runコマンドを使用して次を実行します。

go run main.go

正常に実行されたら、次の図に示すように、ブラウザに「localhost:8000/index」と入力して追加したページを表示します。

図: localhost:8000/index ページの参照
 

「Go言語はWebサーバーを実装します」についてわかりやすく解説!絶対に観るべきベスト2動画

【初心者必見!】Go言語とは?できることや学ぶメリット・将来性について解説
【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座【文字書き起こし、ソースコードも完全無料!】