
在 Go 中,time.Time.Unix 是一个方法(函数类型字段),而非可直接打印的值;直接打印它会输出函数地址(如 0x814ff30),必须加括号调用 Unix() 才能获得秒级 Unix 时间戳。
在 go 中,`time.time.unix` 是一个方法(函数类型字段),而非可直接打印的值;直接打印它会输出函数地址(如 `0x814ff30`),必须加括号调用 `unix()` 才能获得秒级 unix 时间戳。
Go 的 time.Time 类型提供了 Unix() 方法(注意括号),用于返回自 Unix 纪元(1970-01-01 00:00:00 UTC)以来的秒数和纳秒数。而 startTime.Unix(无括号)仅表示该方法的函数值本身——在 Go 中,函数是一等公民,可被赋值、传递,但直接打印时显示的是其内存地址,因此出现类似 0x814ff30 的输出。
✅ 正确写法如下:
package main
import (
"fmt"
"time"
)
func main() {
startTime := time.Now()
fmt.Println(startTime.Unix()) // ✅ 输出类似:1716234567
}⚠️ 注意事项:
-
Unix()返回两个int64值:sec(秒)和nsec(纳秒),若只需秒级时间戳,直接使用第一个返回值即可; - 若需毫秒或微秒级精度,可组合使用:
startTime.UnixMilli()(Go 1.17+)或startTime.Unix()*1000 + int64(startTime.Nanosecond()/1e6); - 不要混淆
Unix()(方法)与Unix()包函数(如time.Unix(sec, nsec)用于反向构造时间); - 在调试时,建议始终用
fmt.Printf("%#v", t.Unix)检查类型,可快速识别是否误用了未调用的方法。
总结:Go 中方法必须显式调用(带 ()),否则操作的是函数值本身。牢记 t.Unix() 而非 t.Unix,即可避免此类“地址打印”陷阱。

















