Negroni 应用教程系列(一)
创建一个 Web 服务器
Negroni 本身和 Go 语言哲学是一脉相承的,这是作者的初衷。我们看看怎么创建一个 Web 服务器。
新建一个 server.go 文件,代码如下:
package main import ( "fmt" "net/http" "github.com/urfave/negroni" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "Hi,I'm Negroni!") }) n := negroni.Classic() // Includes some default middlewares n.UseHandler(mux) http.ListenAndServe(":3000", n) }
这就创建好了一个 Web 服务器,怎么样?比 Java 简单多了吧?在 Go 的世界里,我们完全可以摒弃那些类似 Tomcat Jetty Jboss 容器来跑一个 Web 应用。
开始我们采用 Go 原生的路由器:
mux := http.NewServeMux()
后面我们会介绍,更灵活的第三方路由器 Gorilla Mux:https://github.com/gorilla/mux
路由器代理一个 Go Handler,响应一个页面的具体内容,我们这次只输出一行文字,不会是 Hello World! 的,不能太俗了。
func(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "Hi,I'm Negroni!") }
怎么样?传入响应 ResponseWriter 输出接口和 http.Request 对象,这是原生推崇的方式,后面扩展很地道了。
Negroni 内置了一个经典实例 negroni.Classic(),里面有基本的 Web 组件:日志,异常处理,静态文件,他们都是以中间件的形式。后面我们还会对这三个组件逐一介绍,一步步来吧!
negroni.Classic() 实例其实也是一个 Go http handle,我们放入原生 ListenAndServe 函数里,通过一个端口监听它:
go run server.go这时浏览器打开地址 http://localhost:3000 你会看到一行文本输出:
Hi,I'm negroni!改造原始的 Web 服务器
有时候我们想对 Web 服务器参数做一些微调也是可以的,代码如下:
package main import ( "fmt" "log" "net/http" "time" "github.com/urfave/negroni" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "Hi,I'm negroni!") }) n := negroni.Classic() // Includes some default middlewares n.UseHandler(mux) s := &http.Server{ Addr: ":3000", Handler: n, ReadTimeout: 10 * time.Second, WriteTimeout: 10 * time.Second, MaxHeaderBytes: 1 << 20, } log.Fatal(s.ListenAndServe()) }
上面我们说 negroni.Classic() 实例其实就是一个 Go http handle,所以直接扔到 http.Server 里,跑得妥妥的。同时我们再对连接的读写超时时间做微调:分别指定10秒;响应头部字节数也做大小调整。
最后控制器里打印启动发生的异常日志:
log.Fatal(s.ListenAndServe())
哇~~~ 竟然还没有评论!