Go
golang
Web
go-web-examples

Go Web Examplesの和訳(Hello World)

Go勉強会 Webアプリケーション編 #1で使おうと思っているGo Web Examplesの和訳です。ほぼGoogle翻訳ですが、リンク等も整理された状態であると便利だと思い作りました。次回(HTTP Server)


はじめに

Goはバッテリーを内蔵したプログラミング言語で、Webサーバーがすでに組み込まれています。標準ライブラリのnet/httpパッケージには、HTTPプロトコルに関するすべての機能が含まれています。これには、(他の多くのものの中でも)HTTPクライアントとHTTPサーバーが含まれます。この例では、ブラウザーで表示できるWebサーバーを作成する方法を簡単に把握します。


リクエストハンドラの登録

まず、ブラウザ、HTTPクライアント、またはAPIリクエストからすべてのHTTP接続を受け取るHandlerを作成します。 GoのHTTPハンドラは、次のシグネチャを持つ関数です。

func (w http.ResponseWriter, r *http.Request)

この関数は2つのパラメータを受け取ります。


  1. text/htmlレスポンスを書き込むhttp.ResponseWriter

  2. このHTTPリクエストに関するすべての情報(URLやヘッダーフィールドなど)を含むhttp.Request

リクエストハンドラをデフォルトのHTTPサーバーに登録するのは、次のように簡単です。

http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {

fmt.Fprintf(w, "Hello, you've requested: %s\n", r.URL.Path)
})


HTTP接続をリッスンする

リッスンとは(引用元: e-words: リッスン


TCP/IPの通信ができるOS上で動作しているプログラムが、特定のポート番号への接続を待ち受けること


リクエストハンドラだけでは、外部からのHTTP接続を受け入れることはできません。 HTTPサーバーは、リクエストハンドラに接続を渡すためにポートで待機する必要があります。 ほとんどの場合、ポート80番はHTTPトラフィックのデフォルトポートなので、このサーバーはHTTPトラフィックもリッスンします。 次のコードは、GoのデフォルトのHTTPサーバーを起動し、ポート80番で接続を待ち受けます。ブラウザでhttp://localhostに移動して、サーバーがリクエストを処理するのを見てください。

http.ListenAndServe(":80", nil)


コード (コピペ用)

これは、この例で学んだことを試すために使用できる完全なコードです。


server.go

package main

import (
"fmt"
"net/http"
)

func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, you've requested: %s\n", r.URL.Path)
})

err := http.ListenAndServe(":80", nil)
fmt.Print(err)
}



動作確認

$ sudo go run server.go &

$ curl localhost:80/hello
Hello, you've requested: /hello

次回(HTTP Server)