linux - 在多个 Golang 程序之间传递配置值

标签 linux go

我对在多个 golang 程序之间传递配置值很感兴趣。

我已经尝试过环境变量,但除了设置它们的程序外,其他程序无法读取它们。

我已经测试过,我确定环境变量正在设置,并且可以在设置它的同一进程中读取。此外,如果我通过第一个过程调用第二个过程,它将打印出来:

package main

import (
    "bufio"
    "fmt"
    "os"
)    

func main() {
    os.Setenv("AVARIABLE", "12345")

    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Enter text: ")
    _, _ = reader.ReadString('\n')
    fmt.Println("exiting")
}              

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println(os.Getenv("AVARIABLE"))
}

环境变量上下文对于我的目的来说太窄了。

我正在考虑这些选项:

  1. /etc/profile.d/<filename>.sh 创建一个文件然后运行 ​​source /etc/profile.d/<filename>.sh为了更全局地设置变量。

  2. 在任何人都可以阅读的地方创建一个文件并避免环境变量问题。

有没有更好的方法?我应该如何进行?

最佳答案

如果您只想共享可能在运行时更改的配置,则可以定期或在发生更改时读取共享配置文件。您可以使用一些机制在文件更改时通知您,但这些机制可能取决于操作系统。

另一种选择是使用某种形式的 inter-process communication但如果您只想共享一些配置变量,那可能有点多。

关于linux - 在多个 Golang 程序之间传递配置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37844133/

相关文章:

c++ - 内核模块和 SCHED_RR 线程的优先级

php - 如何将不同的主机条目放在同一个 linux 服务器上,用于不同的虚拟主机?

linux - 在 Linux 上解码 mmap() 标志

戈朗 : strange issue with coroutines and channels

go - 当请求被取消或超时时如何从 http 处理程序返回

go - 推迟到一个函数之外

linux - 如何使用 clutter 直接渲染到 linux framebuffer?

c - 从 C 语言转换为汇编语言时,以 null 结尾的字符串在哪里?

go - Go 如何确定可以使用多个值的上下文?

google-app-engine - 如何清理开发数据存储?