我刚开始使用Go,在我编写的第一个程序中,我打印出一个结构,也显示了
{wall:0 ext:63533980800 loc:<nil>}
感到困惑的是它似乎是time.Time()
类型,谷歌搜索带我到this part of the Go source code,其中#34;挂钟&#34;和#34;单调时钟&#34;在评论中解释。
因此,为了隔离测试,我创建了一个新的简约程序:
package main
import (
"fmt"
"time"
)
type TheStruct struct {
the_time time.Time
}
func main() {
the_struct := TheStruct{time.Now()}
fmt.Println(the_struct)
fmt.Printf("%+v\n", the_struct)
fmt.Println(the_struct.the_time)
fmt.Println()
the_struct_2 := TheStruct{time.Unix(1505099248, 200)}
fmt.Println(the_struct_2)
fmt.Printf("%+v\n", the_struct_2)
fmt.Println(the_struct_2.the_time)
}
打印出以下内容:
{{13719544904843884912 534246 0x1140680}}
{the_time:{wall:13719544904843884912 ext:534246 loc:0x1140680}}
2017-09-11 05:08:11.35635032 +0200 CEST m=+0.000534246
{{200 63640696048 0x1140680}}
{the_time:{wall:200 ext:63640696048 loc:0x1140680}}
2017-09-11 05:07:28 +0200 CEST
所以我想知道这里有两件事:
the_struct.the_time
)时更常用的日期时间表示法相比较?<nil>
为loc的问题?我怎么能解决这个问题?答案 0 :(得分:5)
在结构中没有打印格式化时间的原因是未在未导出的字段上调用String方法(参考https://golang.org/pkg/fmt/):
打印结构时,fmt不能,因此不会调用 格式化方法,如未导出字段上的错误或字符串。
将结构更改为导出字段(将首字母大写)使其调用String方法:
package main
import (
"fmt"
"time"
)
type TheStruct struct {
The_time time.Time
}
func main() {
the_struct := TheStruct{time.Now()}
fmt.Println(the_struct)
fmt.Printf("%+v\n", the_struct)
fmt.Println(the_struct.The_time)
fmt.Println()
the_struct_2 := TheStruct{time.Unix(1505099248, 200)}
fmt.Println(the_struct_2)
fmt.Printf("%+v\n", the_struct_2)
fmt.Println(the_struct_2.The_time)
}
输出:
{2009-11-10 23:00:00 +0000 UTC m=+0.000000000}
{The_time:2009-11-10 23:00:00 +0000 UTC m=+0.000000000}
2009-11-10 23:00:00 +0000 UTC m=+0.000000000
{2017-09-11 03:07:28.0000002 +0000 UTC}
{The_time:2017-09-11 03:07:28.0000002 +0000 UTC}
2017-09-11 03:07:28.0000002 +0000 UTC
答案 1 :(得分:2)
另一个答案很好地涵盖了你问题的第一部分,所以我只在这里介绍第二部分。
简单地说,不,没有,nil位置不是问题,因为根据time.Time
的源代码,零位置意味着UTC。
// loc specifies the Location that should be used to // determine the minute, hour, month, day, and year // that correspond to this Time. // The nil location means UTC. // All UTC times are represented with loc==nil, never loc==&utcLoc. loc *Location