我有一个返回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的初学者,我不明白自己在做什么错。我看到其他人也遇到了与我类似的问题,但不幸的是,提供的答案对我来说没有意义
答案 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