перейти в несколько значений в контексте одного значения - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть функция, возвращающая 2 значения: string и []string

func executeCmd(command, port string, hostname string, config *ssh.ClientConfig) (target string, splitOut []string) {

...
  return hostname, strings.Split(stdoutBuf.String(), " ")
}

Эта функция передается в обычный рабочий канал ch

  ch <- executeCmd(cmd, port, hostname, config)

Я понимаю, что если вы хотите присвоить 2 или более значений одной переменной, вам нужно создать structure, а в случае процедуры go использовать структуру для make a channel

    type results struct {
        target string
        output []string
    }
  ch := make(chan results, 10)

Будучи новичком в GO, я не понимаю, что я делаю неправильно. Я видел других людей, имеющих такую ​​же проблему, как моя, но, к сожалению, предоставленные ответы не имели смысла для меня

1 Ответ

0 голосов
/ 03 ноября 2018

Канал может принимать только одну переменную, поэтому вы правы в том, что вам нужно определить структуру для хранения ваших результатов, однако на самом деле вы не используете это для передачи в ваш канал. У вас есть два варианта, либо измените executeCmd, чтобы получить results:

func executeCmd(command, port string, hostname string, config *ssh.ClientConfig) results {

...
  return results{
    target: hostname, 
    output: strings.Split(stdoutBuf.String(), " "),
  }
}

ch <- executeCmd(cmd, port, hostname, config)

Или оставьте executeCmd как есть и поместите возвращенные значения в структуру после вызова:

func executeCmd(command, port string, hostname string, config *ssh.ClientConfig) (target string, splitOut []string) {

...
  return hostname, strings.Split(stdoutBuf.String(), " ")
}

hostname, output := executeCmd(cmd, port, hostname, config)
result := results{
  target: hostname, 
  output: strings.Split(stdoutBuf.String(), " "),
}
ch <- result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...