如何在Go中正确处理配置:ENV、JSON、YAML还是命令行参数?
大家好!我是一名Go新手开发者,正在编写我的第一个用于处理订单的微服务。我遇到了一个问题:不知道如何正确组织配置参数(服务器端口、数据库连接字符串、外部API的URL、超时时间等)的存储。
目前我只是在main.go中硬编码了所有内容:
```go
package main
import (
"fmt"
"net/http"
)
func main() {
port := ":8080"
dbConn := "postgres://user:pass@localhost:5432/orders?sslmode=disable"
apiURL := "https://api.example.com"
fmt.Println("Starting server on", port)
http.ListenAndServe(port, nil)
}
```
我明白这很糟糕:当环境(dev/staging/prod)发生变化时,需要重新编译二进制文件,而且代码中的密码简直就是安全灾难。我看到Go中使用了不同的方法:命令行参数、环境变量、JSON/YAML/Toml文件。但应该选择哪种?如何整合多个来源?如何使配置具有类型安全性?