Skip to content

配置加载

方法说明

go
// MustLoadConfig 加载配置,异常时 panic
func MustLoadConfig[T any](files ...string) T

luchen 提供了配置文件加载辅助方法,支持泛型,内部使用 github.com/spf13/viper 来加载配置文件。读取配置异常时程序会 panic。

支持加载多个配置文件,当多个文件配置存在相同配置 key 时,后加载的将会覆盖之前的配置。

参考示例

go
package config

import (
	"os"

	"github.com/fengjx/go-halo/fs"

	"github.com/fengjx/luchen"
)

var appConfig AppConfig

type AppConfig struct {
	Server Server `json:"server"`
}

type Server struct {
	HTTP HTTPServerConfig
	GRPC GRPCServerConfig
}

type HTTPServerConfig struct {
	ServerName string `json:"server-name"`
	Listen     string `json:"listen"`
}

type GRPCServerConfig struct {
	ServerName string `json:"server-name"`
	Listen     string `json:"listen"`
}

func init() {
	var configFile string
	envConfigPath := os.Getenv("APP_CONFIG")
	if envConfigPath != "" {
		configFile = envConfigPath
	}
	if configFile == "" && len(os.Args) > 1 {
		configFile = os.Args[1]
	}
	if configFile == "" {
		confFile, err := fs.Lookup("conf/app.yaml", 3)
		if err != nil {
			luchen.RootLogger().Panic("config file not found")
		}
		configFile = confFile
	}
	configFile, err := fs.Lookup(configFile, 3)
	if err != nil {
		panic(err)
	}
	appConfig = luchen.MustLoadConfig[AppConfig](configFile)
}

func GetConfig() AppConfig {
	return appConfig
}