通过设置本地,在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中没有指针常量。