package main
import (
"fmt"
"time"
)
func main() {
fmt.Println(time.Now().UnixMilli())
defer fmt.Println(time.Now())
// 或
defer test1(time.Now().UnixMilli())
time.Sleep(3 * time.Second)
}
func test1(a int64) {
fmt.Println("test1", a)
}# output:
1776816489353
#三秒后:
test1 1776816489353
1776816489353三个时间居然是一样的,后面2个时间戳应该和第一个相差3000毫秒。这是因为传递给fmt.Println和test1函数中的参数会立即计算出来
更明显的例子:
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println(time.Now().UnixMilli())
defer test1(getVal())
time.Sleep(3 * time.Second)
}
func test1(a int64) {
fmt.Println("test1", a)
}
func getVal() int64 {
fmt.Println(time.Now().UnixMilli(), "求值")
return 100
}
//output:
1776821498304
1776821498304 求值
//三秒后
test1 100
用函数包裹,打印三秒后的时间
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println(time.Now().UnixMilli())
defer func() {
fmt.Println(time.Now().UnixMilli())
}()
time.Sleep(3 * time.Second)
}
原文地址:https://dave.cheney.net/2025/12/18/pop-quiz-what-time-was-it