デフォルトで付いてくるパッケージで、httpd (アプリケーション) が簡単に作れます。
import . "http" とすると、http. の前置なしで http パッケージの関数が使えるので、見た目も結構すっきり。
HandlerFunc(func(c *Conn, req *Request) {
が繰り返されるのはちょっとうるさい感じですが。
# あとはテンプレートエンジンがあれば…… 付属してました → Go でテンプレートエンジン (json template) - 酒日記 はてな支店
http://gist.github.com/236088
package main import ( . "http"; // http パッケージの関数を http. prefix なしで使えるように "io"; "fmt"; ) func main() { gourl := "http://golang.org/"; Handle("/", HandlerFunc(func(c *Conn, req *Request) { io.WriteString(c, "hello, world!\n"); })); Handle("/go", HandlerFunc(func(c *Conn, req *Request) { // リダイレクト Redirect(c, gourl, 302); })); Handle("/header", HandlerFunc(func(c *Conn, req *Request) { // レスポンスヘッダを設定 c.SetHeader("X-Powered-By", "Go <" + gourl + ">"); io.WriteString(c, "ok"); })); Handle("/static/", HandlerFunc(func(c *Conn, req *Request) { // ファイルを配信 ServeFile(c, req, "." + req.URL.Path); })); Handle("/params", HandlerFunc(func(c *Conn, req *Request) { body := ""; for key, val := range req.Header { // リクエストヘッダを列挙 body = body + fmt.Sprintf("%s: %s<br>", key, val); } req.ParseForm(); // クエリパラメータを Parse for key, val := range req.Form { // クエリパラメータを列挙 for i := range val { body = body + fmt.Sprintf("%s=%s<br>", key, val[i]); } } io.WriteString(c, body); })); err := ListenAndServe(":8080", nil); if err != nil { panic("ListenAndServe: ", err.String()) } }