《Web Development with Go》Middleware之使用codegangsta.negroni
这个第三方库,使用自定义中间件时,
语法就感觉流畅很多。
package main
import (
"fmt"
"log"
"net/http"
//"time"
"github.com/codegangsta/negroni"
)
func middlewareFirst(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
log.Println("MiddlewareFirst - Before Handler")
next.ServeHTTP(w, r)
log.Println("MiddlewareFirst - After Handler")
}
func middlewareSecond(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
log.Println("MiddlewareSecond - Before Handler")
if r.URL.Path == "/message" {
if r.URL.Query().Get("password") == "password" {
log.Println("Authorized to the system")
next.ServeHTTP(w, r)
} else {
log.Println("Failed to authorize to the system")
return
}
} else {
next.ServeHTTP(w, r)
}
log.Println("MiddlewareSecond - After Handler")
}
func index(w http.ResponseWriter, r *http.Request) {
log.Println("Executing index handler")
fmt.Fprintf(w, "welcome!")
}
func message(w http.ResponseWriter, r *http.Request) {
log.Println("Executing message handler")
fmt.Fprintf(w, "HTTP Middleware is awesome!")
}
func iconHandler(w http.ResponseWriter, r *http.Request) {
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/favicon", iconHandler)
mux.HandleFunc("/", index)
mux.HandleFunc("/message", message)
n := negroni.Classic()
n.Use(negroni.HandlerFunc(middlewareFirst))
n.Use(negroni.HandlerFunc(middlewareSecond))
n.UseHandler(mux)
n.Run(":8080")
}

《Web Development with Go》Middleware之使用codegangsta.negroni的更多相关文章
- 《Web Development with Go》Middleware之共享数据
这个库值得学, 好像写起来越来越溜 package main import ( "fmt" "log" "net/http" //" ...
- Beginners Guide To Web Development
Web Development Front End Development Back End Development
- Web Development Terms
I've come across lots of terms while learning web development. I'm feeling myself overwhelmed. Here ...
- Reloading Java Classes 301: Classloaders in Web Development — Tomcat, GlassFish, OSGi, Tapestry 5 and so on Translation
The Original link : http://zeroturnaround.com/rebellabs/rjc301/ Copyright reserved by Rebel Inc In t ...
- 《Agile Web Development With Rails》读后感--rails基于web设计的best Practices
最近看完<Agile Web Development with Rails>一书,受益匪浅.书中先是用一个简单的web应用带你进入Rails的世界,然后在你大致熟悉之后,再带你了解Rail ...
- Web开发秘方(WEB DEVELOPMENT RECIPES)[47.5MB] PDF扫描版
不借助插件怎样在移动设备上实现动画效果?怎样快速搭建HTML电子邮箱?怎样制作跨PC和移动设备显示的应用界面?怎样利用最新的JavaScript框架提高应用的响应速度?怎样有效利用CoffeeScri ...
- 《Web Development with Go》实现一个简单的rest api
设计模式完了之后,应该实现具体的应用了. 设计模式还得没事就要复习. web应用,学习的是网上的一本书. <Web Development with Go> package main im ...
- 【外文阅读】Web Development in 2020: What Coding Tools You Should Learn---Quincy Larson
原文链接:https://mail.qq.com/cgi-bin/readtemplate?t=safety&check=false&gourl=https%3A%2F%2Fwww.f ...
- Full Stack Web Development
Full Stack Web Development Web Stacks MEAN (Mongo, Express, Angular and Node) LAMP (Linux, Apache, M ...
随机推荐
- 从5个方面让你真正了解Java内存模型
前言 首先我们在了解java内存模型之前先看一下计算机内存模型,理解了计算机内存模型的话后面在看JMM就会简单的多. 计算机内存 计算机是由CPU.主存.磁盘等组成的(简单引出问题熬)我们都知道计算机 ...
- Http协议 & Servlet
Http协议&Servlet Http协议 什么是协议 双方在交互.通讯的时候遵守的一种规范.规则. http协议 针对网络上的客户端与服务器端在执行http请求的时候,遵守的一种规范.其实就 ...
- 《Java算法》排序算法-快速排序
排序算法-快速排序: /** * 给定一个数组:按照从小到大排序. * 思路: * 1. 获取第一个数放入临时变量data,将大于data的数放右边,小于data的数放在左边. * 2. data左边 ...
- c++之运算符
运算符分为:算数运算符.赋值运算符.比较运算符.逻辑运算符 算数运算符:+(正) -(负) + - * / % i++(先赋值后自增) ++i(先自增后赋值) i--(先赋值后自减) --i(先自减后 ...
- 用函数式编程,从0开发3D引擎和编辑器(三):初步需求分析
大家好,本文介绍了Wonder的高层需求和本系列对应的具体功能点. 确定Wonder高层需求 业务目标 Wonder是web端3D开发的解决方案,包括引擎.编辑器,致力于打造开放.分享.互助的生态. ...
- Mybatis一级缓存、二级缓存详讲
Mybatis 一级缓存.二级缓存 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 查询缓存 首先,我们先看一下这个标题“查询缓存”,那就说明跟增.删.改是没有任何关联的,只有在查询 ...
- [译]C# 7系列,Part 1: Value Tuples 值元组
Mark Zhou写了很不错的一系列介绍C# 7的文章,虽然是2年多年前发布的,不过对于不熟悉C# 7特性的同学来说,仍然有很高的阅读价值. 原文:https://blogs.msdn.microso ...
- iOS Privacy Policy
This application respects and protects the privacy of all users who use the service. In order to pro ...
- 安卓JNI精细化讲解,让你彻底了解JNI(二):用法解析
目录 用法解析 ├── 1.JNI函数 │ ├── 1.1.extern "C" │ ├── 1.2.JNIEXPORT.JNICALL │ ├── 1.3.函数名 │ ├── 1 ...
- oop面向对象【类与对象、封装、构造方法】
今日内容 1.面向对象 2.类与对象 3.三大特征——封装 4.构造方法 教学目标 1.能够理解面向对象的思想 2.能够明确类与对象关系 3.能够掌握类的定义格式 4.能够掌握创建对象格式,并访问类中 ...