为了账号安全,请及时绑定邮箱和手机立即绑定

在单值上下文中使用多值

在单值上下文中使用多值

Go
跃然一笑 2023-05-04 17:42:19
我有一个返回 2 个值的函数:string和[]stringfunc 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 的初学者,我不明白自己做错了什么。我见过其他人遇到与我类似的问题,但不幸的是,所提供的答案对我来说没有意义
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

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


查看完整回答
反对 回复 2023-05-04
  • 1 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信