通过设置本地,在go中全局设置时区
有关 在通过设置本地,在go中全局设置时区,go,timezone,Go,Timezone,有关 在zoneinfo.go中,您可以找到以下内容 // Local represents the system's local time zone. var Local *Location = &localLoc 这表明您有一个全局可修改的本地,您可以设置它。通过设置它,它是否会对时区产生影响?设置时间。本地确实会对时间本地时区产生影响 比如说, package main import ( "fmt" "time" ) func main() { now
zoneinfo.go
中,您可以找到以下内容
// Local represents the system's local time zone.
var Local *Location = &localLoc
这表明您有一个全局可修改的本地,您可以设置它。通过设置它,它是否会对时区产生影响?设置
时间。本地确实会对时间本地时区产生影响
比如说,
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now().Round(0)
fmt.Println(now, time.Local)
loc, err := time.LoadLocation("America/Atka")
if err != nil {
fmt.Println(err)
return
}
time.Local = loc
now = time.Now().Round(0)
fmt.Println(now, time.Local)
}
输出:
2019-07-16 10:45:41.263418395 -0400 EDT Local
2019-07-16 05:45:41.263530699 -0900 HDT America/Atka
操场:一个更干净的方法是使用DI。将所有TZ处理代码放在一个位置,并依赖于配置的值(而不是全局状态)。这也可以避免在使用依赖于实际本地时区的其他库(即日志库)时出现错误。您可以在代码中看到,local只是指向另一个无法更改的值的指针。使两者不一致只是自找麻烦。不要这样做。那么为什么它不是一个常量呢?@pihentagy,因为a)它的值不是编译时值,b)Go中没有指针常量。