本文主要记录本人在使用iris框架mvc模块过程当中犯过引发controller反射出错的错误,仅供参考。若有未收录的状况实属正常。golang
controller出现反射错误,只能在异常信息中看到异常类型,但异常栈中找不到具体出错的代码。调试起来至关困难,本身写的代码还好,要是别人拿代码来找你,别提多🍒疼了。所以记录下遇到的状况,要是遇到相似错误,按图索骥,排查问题。数据库
iris官网,在其GitHub仓库的_example文件夹可以找到示例,但没有使用文档。要熟悉框架,老老实实爬代码去吧(╯▔皿▔)╯json
~blablabla~mvc
~blablabla~app
非单例模式下,mvc模块会为每一个请求实例化一个controller(有误欢迎指正)。这时就会从经过 mvc.New() 注册到app的controller实例拷贝一份。到具体类型的 struct 使用的就是golang的 reflect 模块。框架
type MyController struct{ repositroy mydto.Repositroy Ctx iris.Context }
以上 repositroy 用于数据库操做,因为是私有成员,致使反射时没法实例化该变量,致使了反射异常,会报 nil point 错误。调试
controller的handler方法定义时出参不容易出错(反正就几种状况),但我就犯过入参的错误。看代码code
func (c *MyController) Get(ip sting) error{ ··· }
controller的handler方法默认是没有入参的。全部须要入参的方法必须在 BeforeActivation( mvc.BeforeActivation){} 中注册。ip
func (c *MyController) BeforeActivation(b mvc.BeforeActivation){ b.Handle("GET","/{ip:string}","Get") }
若是没有这一步,就会出现reflect出错。如需json参数,可使用定义的 Ctx 变量,反射时框架会注入相应的context。文档