在单值上下文中使用多值

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


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


...

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

}

这个函数被传递到一个go routine channelch


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

我知道当你想为一个变量分配 2 个或更多值时,你需要创建一个structure并且在 go routine 的情况下,使用结构到make一个channel


    type results struct {

        target string

        output []string

    }

  ch := make(chan results, 10)

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


跃然一笑
浏览 75回答 1
1回答

慕容森

该通道只能采用一个变量,因此您需要定义一个结构来保存结果是正确的,但是,您实际上并没有使用它来传递到您的通道中。您有两个选择,要么修改executeCmd为返回一个results:func executeCmd(command, port string, hostname string, config *ssh.ClientConfig) results {...&nbsp; return results{&nbsp; &nbsp; target: hostname,&nbsp;&nbsp; &nbsp; output: strings.Split(stdoutBuf.String(), " "),&nbsp; }}ch <- executeCmd(cmd, port, hostname, config)或者保留executeCmd原样,并在调用后将返回的值放入结构中:func executeCmd(command, port string, hostname string, config *ssh.ClientConfig) (target string, splitOut []string) {...&nbsp; return hostname, strings.Split(stdoutBuf.String(), " ")}hostname, output := executeCmd(cmd, port, hostname, config)result := results{&nbsp; target: hostname,&nbsp;&nbsp; output: strings.Split(stdoutBuf.String(), " "),}ch <- result
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go