env.go

环境变量

const (    Dev  string = "development"    Prod string = "production"    Test string = "test")

定义3种常用的环境名。

var Env = Devvar Root string

Evn就是上面的环境名,Root表示host执行目录的根路径。

初始化

func init() {    setENV(os.Getenv("MARTINI_ENV"))    var err error    Root, err = os.Getwd()    if err != nil {        panic(err)    }}

一个包的init函数会在调用之前隐式的执行,这里使用init初始化一些环境变量。

容错性

当然,环境变量可能没有设,这里预设了值和判断容错。

func setENV(e string) {
if len(e) > 0 {
Env = e
}
}

logger.go

定义logger middleware

func Logger() Handler {...}

这里的返回值Handler是一个空的接口定义

type Handler interface{}

middleware 的标准逻辑

return func(res http.ResponseWriter, req *http.Request, c Context, log *log.Logger) {

这里的context是关键

log.Printf("Started %s %s for %s", req.Method, req.URL.Path, addr)

rw := res.(ResponseWriter)
c.Next()

log.Printf("Completed %v %s in %v\n", rw.Status(), http.StatusText(rw.Status()), time.Since(start))

这里还是标准的装饰者模式,层层嵌套。关于context,后文再作分解。

最新文章

  1. Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法(mvc部分视图的添加)
  2. SDL文字和图形
  3. Replication的犄角旮旯(一)--变更订阅端表名的应用场景
  4. ROW_NUMBER()函数的使用
  5. ACM Coder [T1002] 一直wrong answer,不知道为什么。上代码!就对就对!
  6. Http进行网络通信
  7. 在页面中使用js
  8. 树莓派 安装 php
  9. HBuilder:最快的Web开发IDE
  10. Android蓝牙操作笔记(转)
  11. CActiveForm提示中文化
  12. CentOS下安装Nginx并添加nginx_upload_module
  13. 名字修饰约定extern "C"与extern "C++"浅析
  14. 跳转表C语言,不比redis版本号
  15. 工作流设计参考(包括PHP实现)
  16. Android 自定义通用的loadingview
  17. Java基础—标识符及命名规范
  18. iptables 命令详解
  19. 吐槽一下--最近多次在腾讯以及万科的面试经历---Web前端与PHP后端开发
  20. 【原创】大数据基础之Hive(5)hive on spark

热门文章

  1. Java Log4j日志使用
  2. quickLinux
  3. 【MavenWeb】初探:创建一个Maven Web项目
  4. Python操作excel,及图表展示
  5. JustMock Lite (Free Mocking Framework For .net)
  6. css 图形,非常完美
  7. poj 3268(spfa)
  8. Effective C++ -----条款25:考虑写出一个不抛异常的swap函数
  9. EF查询视图只得到一条记录
  10. You know元音字母吗?