有没有办法使用Reflect访问go 1.8中未导出的字段?这似乎不再起作用:https://stackoverflow.com/a/17982725/555493
请注意,reflect.DeepEqual工作正常(也就是说,它可以访问未导出的字段),但我无法做出该功能的正面或反面.这是一个go playarea,它显示了它的实际效果:https://play.golang.org/p/vyEvay6eVG.src代码如下
import (
"fmt"
"reflect"
)
type Foo struct {
private string
}
func main() {
x := Foo{"hello"}
y := Foo{"goodbye"}
z := Foo{"hello"}
fmt.Println(reflect.DeepEqual(x,y)) //false
fmt.Println(reflect.DeepEqual(x,z)) //true
}
Run Code Online (Sandbox Code Playgroud) package main
import (
"fmt"
)
type bar struct {
}
func (b bar) String() string {
return "bar"
}
type foo struct {
b []*bar
bb *bar
}
func main() {
f := foo{b: []*bar{&bar{}}, bb:&bar{}}
fmt.Println(f, f.b, f.bb)
}
Run Code Online (Sandbox Code Playgroud)
为什么是这样的结果
{[0x176f44] 0x176f44} [栏] 栏
并不是
{[栏] 栏} [栏] 栏
背后有什么原因吗?它似乎很容易实现并且可读性良好。
在 Go 中,你可以跳过已经失败的测试吗?
语境:
我有一个heisenbug,目前无法确定其原因。它有时会导致某些测试失败。通过检查各种日志,我可以识别故障模式。我想做这样的事情:
if t.Failed() {
if strings.Contains(string(suite.Stdout), "connection reset by peer") {
t.Skip("Skip Test failed ")
}
}
Run Code Online (Sandbox Code Playgroud)
这些测试非常有价值,尽管有 heisenbug,我还是想在 CI 中运行它们,所以这只是一个临时的解决方法。
这是行不通的。如果测试失败,是否有办法追溯跳过测试?