2015-09-06 166 views
1

语境: https://github.com/fusspawn/tserver/blob/master/app/controllers/gorp.go转到恐慌

由于试图让格姆设置部分我试图标准随缘/ GORP例子转换。

但是,即使定义了Begin(),Commit(),Rollback()方法也足以导致恐慌。

TRACE 2015/09/06 17:37:47 harness.go:126: Rebuild                         
    INFO 2015/09/06 17:37:47 build.go:172: Cleaning dir tmp                       
    INFO 2015/09/06 17:37:47 build.go:172: Cleaning dir routes                       
    INFO 2015/09/06 17:37:47 build.go:172: Cleaning dir tmp                       
    INFO 2015/09/06 17:37:47 build.go:172: Cleaning dir routes                       
    TRACE 2015/09/06 17:37:47 build.go:151: Exec: [/usr/bin/git --git- dir=/home/fusspawn/go/src/github.com/fusspawn/tserver/.git describe --always -- dirty]                                    
    TRACE 2015/09/06 17:37:47 build.go:94: Exec: [/usr/bin/go build -ldflags -X github.com/fusspawn/tserver/app.APP_VERSION "git-2588ef1" -tags -o /ho 
    me/fusspawn/go/bin/revel.d/github.com/fusspawn/tserver/tserver github.com/fusspawn/tserver/app/tmp]             
    TRACE 2015/09/06 17:39:14 app.go:56: Exec app: /home/fusspawn/go/bin/revel.d/github.com/fusspawn/tserver/tserver [/home/fusspawn/go/bin/revel.d/git 
    hub.com/fusspawn/tserver/tserver -port=46276 - importPath=github.com/fusspawn/tserver -runMode=dev]             
    INFO 2015/09/06 17:39:14 revel.go:329: Loaded module static                      
    INFO 2015/09/06 17:39:14 revel.go:329: Loaded module testrunner                     
    INFO 2015/09/06 17:39:14 revel.go:206: Initialized Revel v0.12.0 (2015-03-25) for >= go1.3               
    INFO 2015/09/06 17:39:14 main.go:30: Running revel server                       
    TRACE 2015/09/06 17:39:14 controller.go:402: Registered controller: App                    
    panic: reflect: call of reflect.Value.Type on zero Value                       

    goroutine 1 [running]:                                
    runtime.panic(0x88cec0, 0xc21011b7a0)                            
    /usr/lib/go/src/pkg/runtime/panic.c:266 +0xb6                        
    reflect.Value.Type(0x0, 0x0, 0x0, 0x0, 0x0)                           
    /usr/lib/go/src/pkg/reflect/value.go:1698 +0x79                        
    github.com/revel/revel.findControllers(0x7f365698bea8, 0x9186e0, 0x0, 0x0, 0x0)                  
    /home/fusspawn/go/src/github.com/revel/revel/controller.go:321 +0x25a                  
    github.com/revel/revel.RegisterController(0x9172a0, 0x0, 0xc2100c4bf0, 0x2, 0x2)                 
    /home/fusspawn/go/src/github.com/revel/revel/controller.go:400 +0x1f3                  
    main.main()                                   
    /home/fusspawn/go/src/github.com/fusspawn/tserver/app/tmp/main.go:150 +0x141b                
    TRACE 2015/09/06 17:39:14 controller.go:402: Registered controller:  GormController                 
    TRACE 2015/09/06 17:39:14 controller.go:402: Registered controller: Static                   
    TRACE 2015/09/06 17:39:14 controller.go:402: Registered controller: TestRunner    

注释掉方法定义将停止恐慌。我似乎无法理解如何调用这些方法(注意revel.InceptceptMethod调用被注释掉)可以使恐慌发生:/

+0

对不起让我花了一点时间格式化 – Fusspawn

+3

您是否尝试过创建[最小化,完整且可验证的示例](http://stackoverflow.com/help/mcve)?对于潜在的回答者来说,不仅比查看整个GitHub回购更容易(这在将来不会相同,这使得这篇文章毫无用处),但是制作回合的行为可以帮助提问者理解他们自己问题更好。 –

回答

2

根据Revel文档,系统在调试模式下查找控制器scanning your source directory这是一个匿名嵌入*Revel.Controller。您看到的错误是由于Revel在执行此控制器扫描初始化过程中进行动态反射和拧紧造成的。所以现在的问题是:为什么在扫描控制器时遇到问题?

您的代码似乎尝试扩展EventStream中的控制器,Revel调试控制器发现代码将尝试读取其作为控制器。但是,代码现在通过嵌入*GormController而不是GormController来违反框架的期望;请参阅Controllers documentation的最后部分。

我想控制器发现逻辑简直就是因为这个而窒息。修复EventStream结构定义。

如果这样可以解决您的问题,您应该向Revel人员发送错误报告,因为您收到的错误消息非常糟糕且非本地的,因为它没有提及名称它尝试在失败时注册为控制器。

+0

就是这样。改变EventStream文档嵌入一个GormController而不是* GormController停止了恐慌。当我思考时总是有意义的。 不太清楚它最终如何成为* GormController。 – Fusspawn