標準パッケージ   Web サーバー

ホーム   Goチュートリアル
目次


Web サーバー

Go は、標準パッケージだけで色々なことができるそうです。ここでは、Goで、Webアプリケーションを作る第一歩として、標準パッケージを使って簡単なWebサーバーを作っていこうと思います。


websver.go


package main

import (
	"fmt"
	"net/http"
)

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

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w,
		"<h1>Hello %s</h3><p>This is a Go web server.</p>",
		r.URL.Path[1:])
}
    


実行方法

実行する場合は、ターミナルに次のように入力してエンターキーを押します。


go run webserver.go
    

macOS の場合は、次のようなアラートが出る場合があります。「許可」をクリックしてください。

次に、Webブラウザを開いて、URLフィールドへ localhost:8080 と入力してエンターキーを押すと、サーバーが作成したページが表示されます。

URLフィールドに localhost:8080/Cathy などのように任意の文字列を追加して、エンターキーを押すと、次のように表示されます。

終了するには、ターミナルに Control + C と入力して、エンターキーを押します。


^C  // Control + C
    


コード説明


	"net/http"
	

net/http パッケージは、HTTP に関するいろいろな関数が定義されているパッケージです。今回はこれを利用して、Webサーバーを作ります。


	http.HandleFunc("/", handler)
	

http.HandleFunc 関数は、第 1 引数の / にアクセスしたら、第 2 引数の handler 関数を呼び出すという意味です。今回のサンプルの場合、この http.HandleFunc 関数を呼び出さない場合は、サーバーは起動しますが、ブラウザには、404 page not found ページが表示されます。
handler という関数名は、任意に決めた名前です。


	http.ListenAndServe(":8080", nil)
	

http.ListenAndServe 関数は、第 1 引数の 8080 番ポートでサーバーを起動するという意味です。多くの場合、第 2 引数は、nil で良いみたいです。


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

/ にアクセスしたときに呼び出される handler 関数の第 1 引数は、ブラウザの表示領域を表しています。そして第 2 引数は、URLフィールドに入力された文字列から構成されるリクエストというものを表しています。
handler という関数名は、任意に決めた名前です。


	fmt.Fprintf(w,
	

fmt.Fprintf 関数は、第 1 引数が表しているブラウザの表示領域に、第 2 引数の書式文字列を表示します。普通の文字列を表示する場合は、fmt.Fprint 関数も使えます。


		r.URL.Path[1:])
	

r.URL.Path は、URLフィールドに入力された localhost:8080 以降の文字列を取得します。localhost:8080 という文字列は含まれません。[1:] で、取得した文字列をスライスしています。この場合のスライスは 0 番目から始まりますので、0 番目は / になります。1 番目からスライスすることによって、/ は、含まれなくなります。


7663 visits
Posted: Jul. 05, 2019
Update: Jul. 05, 2019

ホーム   Goチュートリアル   目次