我使用Go的原生测试工具(gotest)来编写测试。但是当测试由于测试代码中的错误而失败时,由于缺少堆栈跟踪或任何其他上下文信息,我真的无法调试它。甚至,测试代码需要一个上下文对象t,因此在正常模式下运行测试代码并不是一件简单的工作。调试测试代码的最佳做法是什么? 最佳答案 您可以通过这种方式记录堆栈跟踪t.Log(string(debug.Stack()))文档在这里https://golang.org/pkg/runtime/debug/#Stack它比PrintStack更好,因为它不会干扰常规测试日志。
我使用Go的原生测试工具(gotest)来编写测试。但是当测试由于测试代码中的错误而失败时,由于缺少堆栈跟踪或任何其他上下文信息,我真的无法调试它。甚至,测试代码需要一个上下文对象t,因此在正常模式下运行测试代码并不是一件简单的工作。调试测试代码的最佳做法是什么? 最佳答案 您可以通过这种方式记录堆栈跟踪t.Log(string(debug.Stack()))文档在这里https://golang.org/pkg/runtime/debug/#Stack它比PrintStack更好,因为它不会干扰常规测试日志。
来自shell编程,我在那里使用了很多这样的函数:log_action(){case"${1}"in'ERROR')EXIT_CODE="${3}"echo"[${1}]|$(date+"%T")|${2}|Exiting(${EXIT_CODE})"exit${EXIT_CODE};;;'WARNING')echo"[${1}]|$(date+"%T")|${2}|Line:(${3})";;'DEBUG')if[[${DEBUG}-eq"1"]];then{echo"[${1}]|$(date+"%T")|${2}|${3}"};fi;;*)echo"[${1}]|$(date+"
来自shell编程,我在那里使用了很多这样的函数:log_action(){case"${1}"in'ERROR')EXIT_CODE="${3}"echo"[${1}]|$(date+"%T")|${2}|Exiting(${EXIT_CODE})"exit${EXIT_CODE};;;'WARNING')echo"[${1}]|$(date+"%T")|${2}|Line:(${3})";;'DEBUG')if[[${DEBUG}-eq"1"]];then{echo"[${1}]|$(date+"%T")|${2}|${3}"};fi;;*)echo"[${1}]|$(date+"
考虑到我使用的是原始的“errors”go包。还有,panic(11)和panic("11")之间的区别? 最佳答案 panic定义为funcpanic(vinterface{}),调用panic(anything)将打印anything的字符串表示,然后是堆栈跟踪调用函数。唯一的区别是,如果你使用recover,您将能够访问传递给panic的任何内容,对于example:funcmain(){deferfunc(){iferr:=recover();err!=nil{ifn,ok:=err.(int);ok&&n==11{fmt.
考虑到我使用的是原始的“errors”go包。还有,panic(11)和panic("11")之间的区别? 最佳答案 panic定义为funcpanic(vinterface{}),调用panic(anything)将打印anything的字符串表示,然后是堆栈跟踪调用函数。唯一的区别是,如果你使用recover,您将能够访问传递给panic的任何内容,对于example:funcmain(){deferfunc(){iferr:=recover();err!=nil{ifn,ok:=err.(int);ok&&n==11{fmt.
有没有办法使用像IntelliJ这样的IDE在Go中调试测试?我正在为intelliJ使用Go插件,似乎在提供调试配置时,调试按钮被禁用。 最佳答案 在Gogland中是可能的:1.0预览版,构建EAP12,172.3757.46。这个版本有截止日期:2017年11月9日,但是已经有newerversionsreleased而且它们可能有更晚的到期日期。 关于debugging-去测试调试,我们在StackOverflow上找到一个类似的问题: https:/
有没有办法使用像IntelliJ这样的IDE在Go中调试测试?我正在为intelliJ使用Go插件,似乎在提供调试配置时,调试按钮被禁用。 最佳答案 在Gogland中是可能的:1.0预览版,构建EAP12,172.3757.46。这个版本有截止日期:2017年11月9日,但是已经有newerversionsreleased而且它们可能有更晚的到期日期。 关于debugging-去测试调试,我们在StackOverflow上找到一个类似的问题: https:/
如何改写已推送到私有(private)远程的旧提交的消息?我想保留时间戳和标签。我找到了这个命令here:gitfilter-branch-f--msg-filter\'sed"s///g"'----all为了保留我添加的标签:--tag-name-filtercat执行命令时git告诉我:msgfilterfailed我要更改的消息是merge消息“Mergebranch'release/...'”这是问题所在吗? 最佳答案 解决方案是使用反斜杠转义“release/...”中的斜杠。所以我使用的命令是:gitfilter-bra
如何改写已推送到私有(private)远程的旧提交的消息?我想保留时间戳和标签。我找到了这个命令here:gitfilter-branch-f--msg-filter\'sed"s///g"'----all为了保留我添加的标签:--tag-name-filtercat执行命令时git告诉我:msgfilterfailed我要更改的消息是merge消息“Mergebranch'release/...'”这是问题所在吗? 最佳答案 解决方案是使用反斜杠转义“release/...”中的斜杠。所以我使用的命令是:gitfilter-bra