main.go

package main

import (
	"fmt"
	"log"
	"net/http"
	"time"
)

func loggingHandler(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		start := time.Now()
		log.Printf("Started %s %s", r.Method, r.URL.Path)
		next.ServeHTTP(w, r)
		log.Printf("Completed %s in %v", r.URL.Path, time.Since(start))
	})
}

func index(w http.ResponseWriter, r *http.Request) {
	log.Println("Executing index handler")
	fmt.Fprintf(w, "welcome!")
}

func about(w http.ResponseWriter, r *http.Request) {
	log.Println("Executing about handler")
	fmt.Fprintf(w, "Go Middleware!")
}

func iconHandler(w http.ResponseWriter, r *http.Request) {

}

func main() {
	http.HandleFunc("/favicon.ico", iconHandler)
	indexHandler := http.HandlerFunc(index)
	aboutHandler := http.HandlerFunc(about)
	http.Handle("/", loggingHandler(indexHandler))
	http.Handle("/about", loggingHandler(aboutHandler))

	server := &http.Server{
		Addr: ":8080",
	}
	log.Println("Listening...")
	server.ListenAndServe()

}

  

最新文章

  1. python基础:交互式解释器
  2. python中的Queue
  3. C#获取百度新歌TOP50
  4. 对于EditText的详细用法
  5. Html5新增加的属性
  6. Chapter 6 装饰模式
  7. MountService初探
  8. JS判断PC和移动端设备
  9. 按键精灵 vbs 获取网页源码 xp系统被拒绝
  10. ArrayList在foreach正常迭代删除不报错的原因
  11. 用C语言实现Ping程序功能
  12. 安卓TV开发(概述) 智能电视之视觉设计和体验分析
  13. 基于Mycat实现读写分离
  14. 01构建第一个SpringBoot工程
  15. Api 文档管理系统 RAP2 环境搭建
  16. bzoj 3191
  17. linux系统转换root权限
  18. python基础的几个小练习题
  19. Qt 获取文件夹下所有文件
  20. 8 -- 深入使用Spring -- 5...2 使用@Cacheable执行缓存

热门文章

  1. Mysql字符串截取_获取指定字符串中的数据
  2. C# TreeView模糊查找节点
  3. Mac中创建一个OpenGL项目
  4. MyBatis核心对象之StatementHandler
  5. ReactNative: 使用像素密度类PixelRatio进行适配
  6. RTX5的汽车级,工业级,医疗和铁路安全认证已经通过,证书已颁发
  7. Codeforces Round #590 D. Distinct Characters Queries
  8. ETC到底要不要办?有什么好处?
  9. Deepnude算法“tuo”衣服
  10. ASP.NET Server对象