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)
}
}
第15章 15.5-健壮的http应用
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 用单台虚拟主机实现多个域名 HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点.这是因为利用了虚拟主机(...
- 与好友在如约茶事时想要行茶道前还需要做一些准备,你知道都有哪些么? 精神准备 和:泡茶体现了儒家的“中庸之道”,有...