在Delve中进行调试时应理解“ time.Time”值

时间:2018-09-25 10:39:41

标签: debugging go

在调试处理time.Time值的程序时,我需要能够打印出这些值并使它们有意义。在Delve中,如果我打印类型为time.Time的变量,它将打印对象的内部结构,并且不允许我在对象上运行time.Time方法。

我如何理解这种结构并将其转换为我对Unix()UnixNano()String()函数将要打印的内容的正常理解。

例如:

$ dlv test
(dlv) b calendar.go:200
(dlv) p appt
time.Time {
wall: 0,
ext: 63673770600,
loc: *time.Location {
    name: "Local",
    zone: []time.zone len: 4, cap: 4, [
        (*time.zone)(0xc0000a8100),
    ],
    tx: []time.zoneTrans len: 235, cap: 235, [
        (*time.zoneTrans)(0xc0000bb000),
        ...+171 more
    ],
    cacheStart: 1520751600,
    cacheEnd: 1541311200,
    cacheZone: *(*time.zone)(0xc0000a8100),},}

或者在值列表的情况下:

(dlv) p dates
[]time.Time len: 2, cap: 2, [
{
    wall: 0,
    ext: 63673689600,
    loc: *(*time.Location)(0xc00008e9c0),},
{
    wall: 0,
    ext: 63673776000,
    loc: *(*time.Location)(0xc00008ea80),},
]

我找到了a github ticket to add pretty-printing of time.Time values到Delve。在获得批准和发布之前,我该怎么做才能理解这些值并将其转换为更易读的形式?

作为一种解决方法,我考虑添加将根据需要使用.String().Format(...)的输出更新的字符串类型的新变量。有更好的选择吗?

1 个答案:

答案 0 :(得分:0)

似乎the issue添加了您想要的功能,

  

关闭时,您可以改为调用时间值上的方法以通过   调用t.Format(...)或调用t.String()。