第15章 15.5-健壮的http应用

package main

import (
    "io"
    "log"
    "net/http"
)

const form = `<html><body><form action="#" method="post" name="bar">
        <input type="text" name="in"/>
        <input type="submit" value="Submit"/>
    </form></html></body>`

type MyHandleFunc func(http.ResponseWriter, *http.Request)

// 最简单的输出html
func SimpleServer(w http.ResponseWriter, req *http.Request) {
    io.WriteString(w, "<h1>hello go</h1>")
}

// 首先是GET方式,显示html表单
// 点submit之后变成了post
// 然后读取form的in字段,就是input框的值显示出来
func FormServer(w http.ResponseWriter, req *http.Request) {
    w.Header().Set("Content-type", "text/html")
    switch req.Method {
        case "GET":
            io.WriteString(w, form)
        case "POST":
            io.WriteString(w, req.FormValue("in"))
    }
}

func LogPanic(f MyHandleFunc) MyHandleFunc {
    return func(w http.ResponseWriter, req *http.Request) {
        defer func() {
            if x := recover(); x != nil {
                log.Printf("[%v] caught panic: %v", req.RemoteAddr, x)
            }
        }()
        f(w, req)
    }
}

func main() {
        http.HandleFunc("/simple1", LogPanic(SimpleServer))
        http.HandleFunc("/simple2", LogPanic(FormServer))
        if err := http.ListenAndServe(":8081", nil) ; err != nil {
            panic(err)
        }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容