第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

在golang中全局設(shè)置時(shí)區(qū)

在golang中全局設(shè)置時(shí)區(qū)

Go
米脂 2023-06-01 18:12:51
我正在嘗試為我的應(yīng)用程序修改 golang 時(shí)區(qū)我看了一下時(shí)間包,初始化時(shí)區(qū)發(fā)生在時(shí)間/zoneinfo_unix.go @initLocal該函數(shù)只是嘗試讀取環(huán)境變量TZ,如果有效則加載它如果不是,它會回落/etc/localtime,如果它無效,它會回落到UTC到目前為止我已經(jīng)嘗試過1- 工作正常 - 但我不想使用這些方法中的任何一種 - :在我的 docker 文件中,我將 ENV 傳遞給容器,TZ = Africa/Cairo進(jìn)入容器 bash,運(yùn)行$ export TZ = Africa/Cairo2-沒用在我的應(yīng)用程序初始化中(應(yīng)用程序初始化在一個(gè)單獨(dú)的包中,正在主導(dǎo)入),我使用 os.SetEnv("TZ", "Africa/Cairo")當(dāng)我簡化 main 并使用 os.SetEnv("TZ", "Africa/Cairo") 而不導(dǎo)入除“os - time”之外的任何其他包時(shí),它按預(yù)期工作關(guān)于如何使第二種方法起作用的任何想法?Docker 鏡像:golang:1.11.2
查看完整描述

4 回答

?
白豬掌柜的

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊

您可以使用從您的應(yīng)用程序內(nèi)部實(shí)現(xiàn)您想要的os.Setenv("TZ", "Africa/Cairo"),重要的是您必須在任何其他包使用time包中的任何內(nèi)容之前調(diào)用它。


如何確保?創(chuàng)建一個(gè)除了設(shè)置時(shí)區(qū)之外什么都不做的包(稍后你可以向它添加其他東西,但對于我們的例子來說這就足夠了)。


像這樣:


package tzinit


import (

? ? "os"

)


func init() {

? ? os.Setenv("TZ", "Africa/Cairo")

}

首先在你的包中導(dǎo)入這個(gè)tzinit包,如下所示:main


package main


import _ "path/to/tzinit"


// Your other, "regular" imports:

import (

? ? "fmt"

? ? "os"

? ? "time"

? ? ...

)

因此設(shè)置TZenv var 將在任何其他包可以訪問該包之前發(fā)生time。


請注意,我import為 單獨(dú)使用了一個(gè)聲明tzinit,這是因?yàn)樵S多代碼編輯器/IDE 會按字母順序重新排列您的導(dǎo)入,這將確保導(dǎo)入tzinit將保持第一個(gè)導(dǎo)入。


一句警告。


Spec?: Package initialization聲明了初始化包的要求和規(guī)則,并沒有指定處理導(dǎo)入的順序(唯一保證的是所有引用的包在使用之前都會被遞歸初始化)。這意味著盡管當(dāng)前的編譯器按照列出的方式處理它們,但您不能 100% 依賴它。還有一個(gè)問題,即使是main包也有多個(gè)源文件,以不同的順序向編譯器提供它們也可能會改變初始化順序。該規(guī)范將此作為“建議”:

為了確??芍噩F(xiàn)的初始化行為,鼓勵(lì)構(gòu)建系統(tǒng)以詞法文件名順序向編譯器呈現(xiàn)屬于同一包的多個(gè)文件。


所以為了安全起見,最好TZ在啟動 Go 應(yīng)用程序之前設(shè)置環(huán)境變量。


查看完整回答
反對 回復(fù) 2023-06-01
?
墨色風(fēng)雨

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊

在這里為偶然發(fā)現(xiàn)此頁面的人添加我的答案。包中有一個(gè)全局變量time,像這樣使用它main.go


package main


import "time"


func main() {

    loc, err := time.LoadLocation("Africa/Cairo")

    // handle err

    time.Local = loc // -> this is setting the global timezone

}

您的系統(tǒng)必須安裝時(shí)區(qū)數(shù)據(jù)庫。在 docker 中,你必須 apt get/apk add tzdata。但是如果你使用的是go1.15,你也可以嵌入時(shí)區(qū)數(shù)據(jù)庫而無需tzdata在系統(tǒng)上安裝。


package main


import (

    "time"

    _ "time/tzdata"

)


func main() {

    loc, err := time.LoadLocation("Africa/Cairo")

    // handle err

    time.Local = loc // -> this is setting the global timezone

}


查看完整回答
反對 回復(fù) 2023-06-01
?
皈依舞

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊

我可能會遲到,但在全球環(huán)境中設(shè)置時(shí)區(qū)并不是一種可靠的方法。它應(yīng)該在變量或結(jié)構(gòu)中全局設(shè)置。下面是在變量中設(shè)置時(shí)區(qū)的示例。也在圍棋游樂場

package main


import (

    "fmt"

    "log"

    "time"

)


func main() {

    if err := setTimezone("America/Los_Angeles"); err != nil {

        log.Fatal(err) // most likely timezone not loaded in Docker OS

    }

    t := getTime(time.Now())

    fmt.Println(t)

}


var loc *time.Location


func setTimezone(tz string) error {

    location, err := time.LoadLocation(tz)

    if err != nil {

        return err

    }

    loc = location

    return nil

}


func getTime(t time.Time) time.Time {

    return t.In(loc)

}


查看完整回答
反對 回復(fù) 2023-06-01
?
SMILET

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

請注意,如果您想在 AWS 上部署您的應(yīng)用程序,time.LoadLocation可能會返回錯(cuò)誤,因?yàn)樗也坏綌?shù)據(jù)庫文件。從文檔:

LoadLocation 按順序在以下位置查找 IANA 時(shí)區(qū)數(shù)據(jù)庫:

  • 由 ZONEINFO 環(huán)境變量命名的目錄或未壓縮的 zip 文件

  • 在 Unix 系統(tǒng)上,系統(tǒng)標(biāo)準(zhǔn)安裝位置

  • $GOROOT/lib/time/zoneinfo.zip

  • time/tzdata 包,如果它是導(dǎo)入的

您應(yīng)該導(dǎo)入time/tzdata包來解決問題:

import _ "time/tzdata" // Important!


func main() {

    location, err := time.LoadLocation("Europe/Berlin")

    if err != nil {

        log.Fatal().Msgf("Err loading location: %v", err)

    }

    time.Local = location

}


查看完整回答
反對 回復(fù) 2023-06-01
  • 4 回答
  • 0 關(guān)注
  • 511 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號