在单值上下文中使用多值

时间:2018-11-02 19:00:03

标签: go

我有一个返回2个值的函数:string[]string

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

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

此函数向下传递到go常规通道ch

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

我了解,当您要将2个或多个值分配给单个变量时,需要创建一个structure,如果要执行go例程,请使用该结构来make和一个{{1} }

channel

作为GO的初学者,我不明白自己在做什么错。我看到其他人也遇到了与我类似的问题,但不幸的是,提供的答案对我来说没有意义

1 个答案:

答案 0 :(得分:0)

通道只能接受一个变量,因此您正确地需要定义一个结构来保存结果,但是,实际上并没有使用此变量来传递到您的通道中。您有两个选择,可以修改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