golang time.Now().Unix() 文档和实现之间存在差异?

N. *_*rge 2 time go

https://golang.org/pkg/time/#Unix

指出该函数的签名是

func Unix(sec int64, nsec int64) Time
Run Code Online (Sandbox Code Playgroud)

意思是,它返回一个Time对象。

但以下程序会中止并显示错误消息:

14: 不能在赋值中使用 now.Unix() (int64 类型)作为 time.Time 类型

func main() {
    var now time.Time
    now = time.Now()
    fmt.Println(now)

    var secs time.Time
    secs = now.Unix()
    fmt.Println(secs)
}
Run Code Online (Sandbox Code Playgroud)

以下版本的程序产生输出

func main() {
    var now time.Time
    now = time.Now()
    fmt.Println(now)

    // var secs time.Time
    secs := now.Unix()
    fmt.Println(secs)
}
Run Code Online (Sandbox Code Playgroud)

2016-04-12 18:20:22.566965512 -0400 EDT

1460499622

这只是文档中的错误问题吗?

eva*_*nal 5

文档是正确的,您正在查看错误版本的Unix. 您使用的方法是这样的;https://golang.org/pkg/time/#Time.Unix它不带任何参数,在时间对象上调用并以int64. 您引用的版本需要两个参数,都是 int64,秒和纳秒?(nseconds 代表的不是正数)它代表 unix 格式的时间并返回一个time.Time

因此,扩展你的第二个例子;

func main() {
    var now time.Time
    now = time.Now()
    fmt.Println(now)

    // var secs time.Time
    secs := now.Unix()
    fmt.Println(secs)
    t := time.Unix(secs, 0) // get a time from the seconds value which is a unix time
    fmt.Println(t)
}
Run Code Online (Sandbox Code Playgroud)

这是上面的内容,添加了另一行来打印 的类型secs。https://play.golang.org/p/KksPPbQ1Jy