当前位置: 首页 > 面试题库 >

在Golang中全局设置时区

齐振
2023-03-14
问题内容

我正在尝试为我的应用程序修改golang时区

我看了一下 时间 包,初始化时区发生在

time / zoneinfo_unix.go @ initLocal

该函数只是尝试读取环境变量TZ,如果有效,则将其加载

如果不是,它会回退/etc/localtime,如果它无效,则会回退到UTC

到目前为止我尝试过的

1-工作正常-但我不想使用任何一种方法-:

  • 在我的docker文件中,我将ENV传递给了容器, TZ = Africa/Cairo
  • 进入容器重击,运行 $ export TZ = Africa/Cairo

2-没有工作

  • 在我的应用程序初始化中(应用程序初始化在一个单独的软件包中,该软件包正在主要导入中),我使用os.SetEnv(“ TZ”,“ Africa / Cairo”)

当我简化主程序并使用os.SetEnv(“ TZ”,“ Africa / Cairo”)而不导入除“ os-time”以外的任何其他软件包时,它将按预期工作

关于如何使第二种方法起作用的任何想法吗?

Docker镜像:golang:1.11.2


问题答案:

您可以使用os.Setenv("TZ", "Africa/Cairo"),从应用程序内部实现所需的功能,重要的是必须先调用此功能,然后其他任何程序包才能使用该time程序包中的任何内容。

如何保证?创建一个除了设置时区外什么都不做的包(以后您可以添加其他东西,但是对于我们的示例来说就足够了)。

像这样:

package tzinit

import (
    "os"
)

func init() {
    os.Setenv("TZ", "Africa/Cairo")
}

将此tzinit首先 导入到您的main包中,如下所示:

package main

import _ "path/to/tzinit"

// Your other, "regular" imports:
import (
    "fmt"
    "os"
    "time"
    ...
)

因此,设置TZenv var会在其他任何软件包无法访问该time软件包之前进行。

请注意,我import只是为单独使用了一个声明tzinit,其原因是因为许多代码编辑器/
IDE会按字母顺序重新排列导入,这将确保导入tzinit将保持为首次导入。

一句话警告。


规范:程序包初始化”说明了程序包初始化的要求和规则,并且未指定导入的处理顺序(唯一可以保证的是,所有引用的程序包将在使用前递归初始化)。这意味着,尽管当前的编译器按列出的方式处理它们,但您不能100%依靠它。还有一个问题,甚至对于main程序包也有多个源文件,以不同的顺序提供给编译器也可能会更改初始化顺序。规范将其作为“建议”:

为了确保可重现的初始化行为,鼓励构建系统以词法文件名的顺序向编译器提供属于同一软件包的多个文件。

为了安全起见,最好是TZ在启动Go应用之前设置环境变量。



 类似资料:
  • 如何在应用程序级别配置默认查询超时。我使用spring、hibernate和db2作为后端。在datasource级别设置超时不是一个选项,因为我们使用的是旧版本的IBM WebSphere。我尝试在事务管理器中配置defaultTimeout,但这没有帮助。我也不想集成c3p0连接池。hibernate是否为在应用程序级别设置全局查询超时提供了其他选项,如果是,如何配置。

  • 问题内容: 我试图在mysql中设置sql_mode,但会引发错误。 命令: 这不是设置多种模式的正确方法吗?设置会话和全局模式的优点是什么?哪有?我有不同的用户尝试使用不同的UNC值更新数据库,并插入od将会话模式设置为“ NO_BACKSLASH_ESCAPES”,尽管为此我可以使用一种通用的模式。这有意义吗? 请告诉我。 谢谢。 问题答案: 我解决了 正确的模式是:

  • 主要用于设置三级权限以及密码策略等。 该功能用于设置是否启用三级权限以及密码策略相关配置。参数设置完成后,需要5分钟后生效。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “系统配置/全局设置/全局设置” 菜单项,进入全局设置页面。 目前全局设置支持设置以下选项: 配额检查开关:设置是否启用配额检查,默认关闭配额检查。如用户有配额限制的要求,可以开启配额检查,开启后,用户可以在域或

  • 目前仅支持字典设置和全局设置,参数配置后全局生效。 字典设置 用于自定义云管平台中常用菜单的显示名称。 全局设置 主要用于设置三级权限以及密码策略等。

  • 1)加密设置 加密设置分为,PC加密设置和移动加密设置。 PC加密设置: 当PC加密为“打开”状态时,新上传的视频会进行加密(加密视频只能使用获得场景视频播放器),已上传的视频保持不变。 当PC加密为“关闭”状态时,新上传的视频不会进行加密,已上传的视频保持不变。 移动加密设置: 非加密——当设置成【非加密】时,移动端将不受限制,此时不受保护。 WEB授权——可以在移动WEB端播放和APP端播放,

  • 在直播管理页面点击 “全局设置” ,观看者可以在观看端对客户端进行打赏。打赏分为现金打赏 和 道具打赏 。 打赏设置 说明: 1)全局设置中支持配置现金打赏及道具打赏相关参数 2)直播间可应用全局打赏设置,应用后,观看端可对讲师进行打赏 敏感词设置 说明: 1)全局设置中支持设置敏感词,支持手动单个添加及应用模板批量导入 2)已添加的敏感词支持删除操作,也可一键情况敏感词列表 3)支持按角色进行过