2019独角兽企业重金招聘Python工程师标准>>>

#web服务器

浏览一个网页就像买啤酒,你给我钱(http请求),我给你啤酒(http返回)
web服务器就充当了营业员的角色
买啤酒从宏观来看,就2步,一手交钱一手交货。其实营业员在给你啤酒之前,还做了其他的事情,比如验钞和查看库存等。并且是有先后顺序的,一般是验钞通过后,再去查看库存。
web服务器也一样,它收到浏览器发来的请求后,会按预定设计的顺序来做一个一个的function,最后将处理的结果返回给浏览器。浏览器拿到返回的内容(html源码),就可以画在屏幕上给用户看了。

#macaron.Use

Use方法,就是用来注册一个一个的func的,这些func是全局的,也就是任何http请求过来,会最先调用这些func,以此执行。注册的顺序也就是执行的顺序。
Use方法可以使用多次,但每次只能注册一个func。

m.Use(func(){println(1)
})
m.Use(func(){println(2)
})
// 任何http请求过来,会先打印1,再打印2在控制台上

#macaron.Get

Get方法也是来注册与上面Use一样的func的,Get方法注册的func 会在 Use注册的func执行完毕后,再依次执行。
Get方法只能使用1次(相同pattern的情况下),可以同时注册1个或n个func,用逗号隔开

m.Get("/",func(){println(3)},func(){println(4)})
// 如果访问的是“/”,会再继续打印3和4在控制台上

到目前为止,还没有注入任何东西,所以只能用macaron.Context

m := macaron.Classic() 事实上用经典模式已经帮你注入了一些了。先当作没有注入来看

#开始注入

先注入一个Student的struct

// 这里是Student的定义,以后不再说了
type Student struct {
Id   int
Name string
}func (s *Student) GetName() string {return s.Name
}func (s *Student) Job() {fmt.Println("study..")
}

注入的func,这里的注入,就相当于注册参数,使用Map的方法来注册参数

ctx.Map("arg2") //注册string类型的参数为arg2
ctx.Map(s) //注册Student类型的参数为s(也就是小明的那个实例)
// 关于注入,看http://my.oschina.net/u/943306/blog/500237

代码:

func MidStruct(opt string) macaron.Handler {var s *Studentif opt == "xm" {s = &Student{Id: 1, Name: "xiao ming"}} else {s = &Student{Id: 1, Name: "xiao wang"}}return func(ctx *macaron.Context) {ctx.Map(s)  //关键语句,用于注入struct}
}

执行注入

m.Use(MidStruct("xm")) //执行注入动作

使用struct

// 如果之前注入过,那之后就可以取到被注入的struct了m.Get("/",func(){println(3)},func(){println(4)},func(s *Student){  //因为之前注入过了,所以这里直接用不会报错s.Job() //打印完上面的4后,会再打印一行study..})

这里的最后一个func,就相当于(http://my.oschina.net/u/943306/blog/500237#OSC_h1_9) 里的f2

#完整代码

package mainimport ("fmt""github.com/Unknwon/macaron"
)func main() {m := macaron.Classic()m.Use(MidStruct("xm"))m.Get("/", func(ctx *macaron.Context, s *Student) {fmt.Println(s.GetName())s.Job()})m.Run()
}func MidStruct(opt string) macaron.Handler {var s *Studentif opt == "xm" {s = &Student{Id: 1, Name: "xiao ming"}} else {s = &Student{Id: 1, Name: "xiao wang"}}return func(ctx *macaron.Context) {ctx.Map(s)}
}type Student struct {Id   intName string
}func (s *Student) GetName() string {return s.Name
}func (s *Student) Job() {fmt.Println("study..")
}

转载于:https://my.oschina.net/u/943306/blog/506905

Macaron的注入struct相关推荐

  1. Linux I2C总线详解

    概述: 1.I2C概念 2.I2C硬件结构图 3.I2C总线初始化 4.I2C控制器device 节点添加及driver注册 5.I2C设备节点添加及driver注册 5.adapter设备及驱动添加 ...

  2. 固件安全性—防止内存损坏和注入攻击

    固件安全性-防止内存损坏和注入攻击 Firmware Security – Preventing memory corruption and injection attacks 构成物联网(IoT)主 ...

  3. ce变速注入dll失败_[LAB]一种无痕Dll模块注入方式

    0x00 前言 方式:CreateRemoteThread 需要:visual studio 2015 需要:进程模块查看器,如[PCHunter][ProcessHacker]等. 需要:创建一个用 ...

  4. 一种在注入进程中使用WTL创建无焦点不在任务栏出现“吸附”窗口的方法和思路

    最近一直在做沙箱项目,在项目快接近结尾的时候,我想给在我们沙箱中运行的程序界面打上一个标记--标识其在我们沙箱中运行的.我大致想法是:在被注入程序的顶层窗口上方显示一个"标题性"窗 ...

  5. VC下提前注入进程的一些方法3——修改程序入口点

    前两节中介绍了通过远线程进行注入的方法.现在换一种方法--修改进程入口点.(转载请指明出处) 在PE文件中,其中有个字段标识程序入口点位置.我们通过这个字段,到达程序入口点.PE文件的结构我这儿不讨论 ...

  6. VC下提前注入进程的一些方法2——远线程带参数

    在前一节中介绍了通过远线程不带参数的方式提前注入进程,现在介绍种远线程携带参数的方法.(转载请指明出处) 1.2 执行注入的进程需要传信息给被注入进程 因为同样采用的是远线程注入,所以大致的思路是一样 ...

  7. Swift中依赖注入的解耦策略

    原文地址:Dependency Injection Strategies in Swift 简书地址:Swift中依赖注入的解耦策略 今天我们将深入研究Swift中的依赖注入,这是软件开发中最重要的技 ...

  8. 教你如何在C++二进制文件中注入git信息

    这篇文章主要给大家介绍了关于怎么在C++二进制文件中注入git信息的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下 在后端生产环境中,为了方便定位问题,我们需要根据一个binary文件 ...

  9. 进程注入的研究与实现

    为了对内存中的某个进程进行操作,并且获得该进程地址空间里的数据,或者修改进程的私有数据结构,必须将自己的代码放在目标进程的地址空间里运行,这时就避免不了使用进程注入方法了. 进程注入的方法分类如下: ...

最新文章

  1. 北大数学天才毕业后坚持出家:理想现实间的挣扎
  2. java openjdk 卸载_java – 如何卸载OpenJDK?
  3. 隐藏Nginx或Apache以及PHP的版本号的方法
  4. 定时清理日志文件-python实现
  5. Sub-Projects in Xcode(Xcode中的子项目)
  6. 安卓开发 登录用户信息缓存_在Linux上使用finger命令查询登录用户信息
  7. freemaker--hibernate
  8. 使用phonegap,进行页面跳转
  9. 导航猫连接Oracle
  10. 验证注册页面信息(JavaScript)
  11. 数字通信之抽样(二)
  12. App项目实战之路(一):概述篇
  13. 在线CAD平台,MxCAD云图 2021.01.20更新,在线CAD软件
  14. html中怎么做扇形菜单,纯CSS3实现扇形动画菜单(简化版)实例源码
  15. Count UVA - 1645
  16. HTML制作简单网页(京东新闻资讯页,歌曲推荐网页)
  17. 【P28】Enjoy The jFET 超简分立耳放
  18. 了解黑客常用的工具,我也能反黑了
  19. java上机实验作业 编写汽车类car_请问如何用Java编写一个汽车类Car
  20. VNCTF2023-misc方向wp

热门文章

  1. 224秒!ImageNet上训练ResNet-50最佳战绩出炉,索尼下血本破纪录
  2. 李飞飞夫妇打造了两件秘密武器,让机器人快速学习人类技能
  3. 南开大学开源新图像分割算法,刷新精度记录 | 资源
  4. 微软又开源了一个机器学习框架,这次是核心产品的机器学习引擎infer.NET
  5. 这是云代驾,不是打游戏
  6. Linux系统下破解root用户密码
  7. KVM的概念和云计算
  8. 关于Floyd-Warshall算法由前趋矩阵计算出的最短路径反映出了算法的执行过程特性的证明...
  9. Python C API 使用详解(二)
  10. Markdown (H5 ) 降价