fmt.Printf以递归方式跟踪指针的标志是什么?

时间:2015-02-13 20:21:51

标签: go

我在测试用例失败时打印结构时遇到问题。它是指向结构指针片段的指针,或*[]*X。问题是我需要知道切片内X - 结构的内容,但我不能让它打印整个链。它只打印它们的地址,因为它是一个指针。我需要它来遵循指针。

然而这是无用的,因为我要测试的函数修改了它们的内容,并且修改测试代码不使用指针只意味着我没有用指针测试代码(这样就不行了)。

此外,只是循环切片不起作用,因为真正的函数使用反射并可能处理多个指针层。

简化示例:

package main

import "fmt"

func main() {
    type X struct {
        desc string
    }

    type test struct {
        in   *[]*X
        want *[]*X
    }

    test1 := test{
        in: &[]*X{
            &X{desc: "first"},
            &X{desc: "second"},
            &X{desc: "third"},
        },
    }

    fmt.Printf("%#v", test1)
}

示例输出:

main.test{in:(*[]*main.X)(0x10436180), want:(*[]*main.X)(nil)}

(代码位于http://play.golang.org/p/q8Its5l_lL

1 个答案:

答案 0 :(得分:10)

我不认为fmt.Printf具有您正在寻找的功能。

您可以使用https://github.com/davecgh/go-spew库。

spew.Dump(test1)