Задать вопрос
@kupp9

Как прописать путь к конфигу?

Добрый день, есть ли идеи как можно config.json читать после компиляции из любой директории?

Заранее спасибо!

//Config global
var Config = loadConfig()

//ConfigST struct
type ConfigST struct {
	mutex   sync.RWMutex
	Server  ServerST            `json:"server"`
	Streams map[string]StreamST `json:"streams"`

func loadConfig() *ConfigST {
	var tmp ConfigST
	data, err := ioutil.ReadFile("config.json")
	if err != nil {
		log.Fatalln(err)
	}
	err = json.Unmarshal(data, &tmp)
	if err != nil {
		log.Fatalln(err)
	}
	for i, v := range tmp.Streams {
		v.Cl = make(map[string]viewer)
		tmp.Streams[i] = v
	}
	return &tmp
  • Вопрос задан
  • 80 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@historydev
Редактирую файлы с непонятными расширениями
Если конфиг не должен предоставляться юзером, включи его байты в бинарник.

import (
	_ "embed"
	"fmt"
)

//go:embed my_config.json
var jsonData []byte

func main() {
	// Выводим встроенные байты
	fmt.Println(string(jsonData))
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Если есть какая-то определённая директория, в которой лежат конфиги (допустим /config/config.json), то самым простым и прямолинейным способом, без всяких зависимостей и ухищрений, будет создать в самой директории файл /config/config.go, который будет предоставлять простенький пакет config, и задачей которого будет тупо загружать конфиг из файла в своей директории в структурку с конфигом. И в остальных пакетах будете просто импортировать этот пакет и получать готовые данные.

Или вот так

package main

import (
	"encoding/json"
	"fmt"
	"log"
	"os"
	"path/filepath"
)

type Config struct {
	Env string `json:"env"`
}

func main() {
	// Получаем текущую директорию
	currentDir, err := os.Getwd()
	if err != nil {
		panic(err)
	}

	// Получаем путь к файлу относительно текущей директории
	filePath := filepath.Join(currentDir, "config/config.json")

	file, err := os.ReadFile(filePath)
	if err != nil {
		log.Fatal(err)
	}
	var config Config
	json.Unmarshal(file, &config)

	fmt.Println(fmt.Sprintf("ENV: %s", config.Env))
}
Ответ написан
Комментировать
Afranius
@Afranius
Из говорящих дольше живут те, что говорят меньше.
обычно конфиги пользователей лежат в хомяках пользователей
типа /home/user/.program/config.json или что-то подобное.
В винде так же.
Определить пользователя, от имени которого запущен бинарник - задачка для детского сада.

Во-первых из переменных окружения, во-вторых для современных многопользовательских систем это классика.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы