相关疑难解决方法(0)

在golang/reflect中访问未导出的字段?

有没有办法使用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)

reflection go private-members

9
推荐指数
3
解决办法
7547
查看次数

为什么 fmt.Println 在结构上调用时不使用成员的 String() 方法?

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

5
推荐指数
1
解决办法
349
查看次数

如何跳过失败的测试

在 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 中运行它们,所以这只是一个临时的解决方法。

这是行不通的。如果测试失败,是否有办法追溯跳过测试?

go go-testing

-1
推荐指数
1
解决办法
2762
查看次数

标签 统计

go ×3

go-testing ×1

private-members ×1

reflection ×1