[ja] Translate 03.2.md into Japanese.

This commit is contained in:
Shin Kojima
2013-05-29 01:21:02 +09:00
parent 9e245d8632
commit e576b176ba

66
ja/ebook/03.2.md Normal file
View File

@@ -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パッケージのつの関数を呼ぶだけで良いことがわかります。
>もしあなたが以前PHPプログラマであれば。こう問うかもしれません。我々のnginx、apacheサーバは必要ないのですかとなぜならこいつは直接tcpポートを関ししますので、nginxがやることをやってくれます。またsayhelloNameは実は我々が書いたロジック関数ですので、phpの中のコントローラcontroller関数に近いものです。
>もしあなたがpythonプログラマであったのなら、tornadoを聞いたことがあると思います。このコードはそれとよく似ていませんかええ、その通りです。goはpythonのような動的な言語によく似た特性を持っています。webアプリケーションを書くにはとても便利です。
>もしあなたがrubyプログラマであったのなら、RORの/script/serverを起動したのと少し似ている事に気づいたかもしれません。
Goを通じて簡単な数行のコードでwebサーバを立ち上げることができました。さらにこのWebサーバの内部ではマルチスレッドの特性をサポートしています。続くつの節でgoが以下にWebのマルチスレッドを実現しているのか細かくご紹介します。
## links
* [目次](<preface.md>)
* 前へ: [Webの作業方法](<03.1.md>)
* 次へ: [Goはどのようにしてweb作業を行うか](<03.3.md>)