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