The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
ssshooter

一个关于 godotenv 的求助

  •  
  •   ssshooter ·
    ssshooter · Jul 26, 2023 · 2710 views
    This topic created in 1201 days ago, the information mentioned may be changed or developed.

    我在 main 函数调用了 godotenv.Load(),但是在其他包里使用时如果不把 os.Getenv 放在函数里,直接在函数外运行,就会获取不到环境变量,大概是因为 godotenv 还没把变量读进去吧,这个情况下应该怎么写呢?必须写一个函数 return 这些环境变量吗?

    10 replies  •  2023-08-16 10:43:15 +08:00
    NessajCN
    NessajCN
    Jul 26, 2023
    1
    你自己就有答案了不是吗
    把 os.Getenv 放到函数里就行了
    Vegetable
    Vegetable
    Jul 26, 2023
    2
    func init() {
    godotenv.Load()
    }

    搜索 golang init 函数
    ssshooter
    ssshooter
    OP
    Jul 26, 2023
    3
    @NessajCN 几个函数都用一个环境变量,不想每个函数里面都拿一次嘛


    @Vegetable 是每个 package 里都写一次 load 吗?
    NessajCN
    NessajCN
    Jul 26, 2023
    4
    @ssshooter 那你可以写个结构体,在 main()里获取 env 后赋值给它,然后把函数都写成它的 method
    FanGanXS
    FanGanXS
    Jul 26, 2023
    5
    了解一下 init 函数
    mcfog
    mcfog
    Jul 26, 2023
    6
    比较简单&勉强算好维护的办法

    package config

    func init() { LOAD_YOUR_CONFIG() }

    func Get(string) string { ... }
    yleoer
    yleoer
    Jul 26, 2023
    7
    一般都是将 env 读取出来,覆盖配置文件的值,然后保存到配置结构体中,后续只需要读取配置参数
    learningman
    learningman
    Jul 26, 2023 via Android
    8
    常量和 init 不保证初始化顺序的,还是别这么搞比较好
    lanlanye
    lanlanye
    Jul 26, 2023 via iPhone
    9
    import _ "github.com/joho/godotenv/autoload"

    用这个,最好结合 7 楼的做法
    ysmood
    ysmood
    Aug 16, 2023
    10
    pkg 里面确实麻烦,可以用我这个库

    https://github.com/ysmood/dotenv
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   852 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 17:11 · PVG 01:11 · LAX 09:11 · JFK 12:11
    ♥ Do have faith in what you're doing.