From e576b176ba109dbb77c41b81e243f7508e9a57b7 Mon Sep 17 00:00:00 2001 From: Shin Kojima Date: Wed, 29 May 2013 01:21:02 +0900 Subject: [PATCH] [ja] Translate 03.2.md into Japanese. --- ja/ebook/03.2.md | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 ja/ebook/03.2.md diff --git a/ja/ebook/03.2.md b/ja/ebook/03.2.md new file mode 100644 index 00000000..7a082ea3 --- /dev/null +++ b/ja/ebook/03.2.md @@ -0,0 +1,66 @@ +# 3.2 GOでwebサーバを立てる + +前の節でWebはHTTPプロトコルに基づいたサービスであるとご紹介しました。Go言語では完全なnet/httpパッケージを提供しています。httpパッケージを通して実行できるwebサービスを非常に簡単に立ち上げる事ができます。同時にこのパッケージを使用することで、簡単にwebのルーティング、静的なファイル、テンプレート、cookie等のデータに対して設定と操作を行うことができます。 + +## httpパッケージでwebサーバを立てる + + package main + + import ( + "fmt" + "net/http" + "strings" + "log" + ) + + func sayhelloName(w http.ResponseWriter, r *http.Request) { + r.ParseForm() //オプションを解析します。デフォルトでは解析しません。 + fmt.Println(r.Form) //このデータはサーバのプリント情報に出力されます。 + fmt.Println("path", r.URL.Path) + fmt.Println("scheme", r.URL.Scheme) + fmt.Println(r.Form["url_long"]) + for k, v := range r.Form { + fmt.Println("key:", k) + fmt.Println("val:", strings.Join(v, "")) + } + fmt.Fprintf(w, "Hello astaxie!") //ここでwに入るものがクライアントに出力されます。 + } + + func main() { + http.HandleFunc("/", sayhelloName) //アクセスのルーティングを設定します。 + err := http.ListenAndServe(":9090", nil) //監視するポートを設定します。 + if err != nil { + log.Fatal("ListenAndServe: ", err) + } + } + +上のコードはbuildした後、web.exeを実行した際、9090ポートでhttpリンクリクエストを監視します。 + +ブラウザで`http://localhost:9090`を入力してください。 + +ブラウザで`Hello astaxie!`と出力されたのが見えたかと思います。 + +アドレスを変えて試してみましょう:`http://localhost:9090/?url_long=111&url_long=222` + +ブラウザで出力されたものは何でしょうか。サーバは何と出力していますか? + +サーバで出力される情報は以下の通りです: + +![](images/3.2.goweb.png?raw=true) + +図3.8 ユーザがWebにアクセスしてサーバが出力する情報 + +上のコードでwebサーバを書くためにはhttpパッケージの2つの関数を呼ぶだけで良いことがわかります。 + +>もしあなたが以前PHPプログラマであれば。こう問うかもしれません。我々のnginx、apacheサーバは必要ないのですかと?なぜならこいつは直接tcpポートを関ししますので、nginxがsやることをやってくれます。またsayhelloNameは実は我々が書いたロジック関数ですので、phpの中のコントローラ(controller)関数に近いものです。 + +>もしあなたがpythonプログラマであったのなら、tornadoを聞いたことがあると思います。このコードはそれとよく似ていませんか?ええ、その通りです。goはpythonのような動的な言語によく似た特性を持っています。webアプリケーションを書くにはとても便利です。 + +>もしあなたがrubyプログラマであったのなら、RORの/script/serverを起動したのと少し似ている事に気づいたかもしれません。 + +Goを通じて簡単な数行のコードでwebサーバを立ち上げることができました。さらにこのWebサーバの内部ではマルチスレッドの特性をサポートしています。続く2つの節でgoが以下にWebのマルチスレッドを実現しているのか細かくご紹介します。 + +## links + * [目次]() + * 前へ: [Webの作業方法](<03.1.md>) + * 次へ: [Goはどのようにしてweb作業を行うか](<03.3.md>)