gpt4 book ai didi

在代码中声明但未调用的函数时继续 panic

转载 作者:IT王子 更新时间:2023-10-29 02:05:02 26 4
gpt4 key购买 nike

上下文: https://github.com/fusspawn/tserver/blob/master/app/controllers/gorp.go

作为尝试设置 gorm 的一部分,我尝试转换标准的 revel/gorp 示例。

但是。即使定义了 Begin()、Commit()、Rollback() 方法也足以引起 panic 。

   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

注释掉方法定义将停止 panic 。我似乎无法理解如何不调用这些方法(注意 revel.InterceptMethod 调用被注释掉)会导致 panic 发生:/

最佳答案

根据 Revel 文档,系统通过 scanning your source directory 查找处于 Debug模式的 Controller 。对于任何匿名嵌入 *Revel.Controller 的东西。您看到的错误是由于 Revel 在此 Controller 扫描初始化期间进行动态反射并搞砸了。所以现在的问题是:为什么它在扫描 Controller 时遇到问题?

您的代码似乎试图扩展 EventStream 中的 Controller ,Revel 调试 Controller 发现代码将尝试将其读取为 Controller 。但是,目前的代码通过嵌入 *GormController 而不是 GormController 违反了框架的预期;查看 Controllers documentation 的最后一部分.

我认为 Controller 发现逻辑因此而令人窒息。修复 EventStream 结构定义。

如果这确实为您解决了问题,您可能应该向 Revel 人员发送错误报告,因为您收到的错误消息非常糟糕并且是非本地的,因为它没有提到它在失败时尝试注册为 Controller 的东西。

关于在代码中声明但未调用的函数时继续 panic ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32426216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com