假设我有一些代码,如下所示:
value, err := some3rdpartylib.DoSomething()
if err != nil {
panic(err)
}
在 case err != nil
中,我会得到如下结果:
panic: some error explanation here
goroutine 1 [running]:
main.main()
/tmp/blabla/main.go:6 +0x80
这个堆栈跟踪是完全合法的,但有时这些错误消息可能无法澄清发生了什么,所以我想深入研究第三方库的源代码,以调查到底是什么导致了这个错误被返回.然而,当我的代码像这样惊慌失措时,无法获得返回此错误的实际位置.
再进一步说明一下:因为我来自抛出异常的JVM世界,所以我可以完全跟踪抛出异常的确切代码行,因此可以很容易地找到位置并查看哪里出了问题.Go堆栈跟踪正好在我的代码死机的地方结束,因此在我的情况下没有太大用处.
我已经创建了一个playground here,理想情况下,我希望能够跟踪错误到它实际返回的位置,而不是panic .(例如至第17,return "", errors.New("some error explanation here")
行)
这有可能吗?