Я разрабатываю приложение на своей Ubuntu 18.04 с go.
У меня есть пакет конфигурации. Идея состоит в том, чтобы использовать этот пакет в других пакетах для получения конфигураций. Конфигурация пакета имеет переменную структуры _Config
. Идея, что функция GetConfig
вернет _Config
, а когда _Config
не заполнена, функция сначала заполнит _Config
из json файла.
Пакет конфигурации выглядит следующим образом:
package config
import (
"fmt"
"github.com/tkanos/gonfig"
)
type Config struct {
DB struct{
DBHost string
DBPort uint
DBUser string
DBPassword string
DBName string
}
}
var _Config Config
func GetConfig() Config {
if (Config{}) == _Config {
_Config := Config{}
err := gonfig.GetConf("/home/mike/go/src/project/config.json", &_Config)
if err != nil{
panic("Error when parsing config")
}
fmt.Println(_Config.DB)
}
return _Config
}
И результат Println
:
{127.0.0.1 3306 user Password project}
Код основного пакета выглядит так:
основной пакет
import (
"fmt"
"project/config"
_ "github.com/jinzhu/gorm/dialects/mysql"
_ "project/config"
"syscall"
"unsafe"
)
func main() {
_config := config.GetConfig()
fmt.Println(_config)
}
И результат Println
:
{{ 0 }}
Файл json выглядит следующим образом:
{
"DB": {
"DBHost": "127.0.0.1",
"DBPort": 3306,
"DBUser": "user",
"DBPassword": "Password",
"DBName": "project"
}
}
Так почему же это так? Почему я не могу получить правильный конфиг в основном пакете? Проблема Я думаю, что у меня неправильное представление о том, как Go работает в такой ситуации.
Пожалуйста, уточните этот момент для меня, и это хороший подход для конфигурации в приложении? Если нет, что такое хороший шаблон? Идея состоит в том, чтобы иметь один доступ и один ответственный пакет для конфигурации, который я могу использовать везде