#string #go #var
#строка #Вперед #var
Вопрос:
Я пытаюсь прочитать переменную, отправленную в качестве внешнего параметра --configFile=""
, но я всегда получаю сообщение об ошибке not found, даже если я передаю абсолютный путь
Переменные:
var (
c Config
conf = c.getConf()
app = kingpin.New("exporter", "Exporter for Prometheus.")
configFile = app.Flag("configFile", "Configuration file destination (/etc/exporter/config.yaml)").Default("/etc/exporter/config.yaml").String()
)
Конфигурация:
func (c *Config) getConf() *Config {
yamlFile, err := ioutil.ReadFile(string(*configFile))
if err != nil {
log.Errorf("yamlFile.Get err #%v ", err)
}
err = yaml.Unmarshal(yamlFile, c)
if err != nil {
log.Errorf("Unmarshal: %v", err)
}
return c
}
Команда / Вывод:
server:/etc/exporter # ./exporter --configFile="/etc/exporter/config.yaml"
ERRO[0000] yamlFile.Get err #open : no such file or directory
ls -ltr:
total 14152
-rw------- 1 root root 1334 Sep 25 20:47 config.yaml
-rwxrwxr-x 1 root root 14466568 Sep 25 22:03 exporter
Ответ №1:
Замените код здесь https://github.com/rafal-szypulka/itm_exporter/blob/master/main.go#L51
с:
conf *Config
Замените код здесь https://github.com/rafal-szypulka/itm_exporter/blob/master/main.go#L354
с:
p := kingpin.MustParse(app.Parse(os.Args[1:]))
conf = c.getConf()
switch p {
Комментарии:
1. но когда я добавляю статическую переменную, пример:
yaml File, err := ioutil.ReadFile("/etc/exporter/config.yaml")
. Скрипт успешно выполняется!2. Ваша проблема в том, что kingpin не выполняет синтаксический анализ. Вы должны вызвать
kingpin.MustParse
.3. можете ли вы привести пример?
4. Добавлены инструкции.
5. Вероятно golang-book.com , но я их не читал.