Как читать внешние переменные

#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 , но я их не читал.