如果和其他干扰golang中的变量scop

时间:2017-05-04 14:16:49

标签: macos go

我有以下golang代码:

        var cmd1 *exec.Cmd
         msg=receive_cmd();
        if strings.Contains(msg, "Log-In") {
             cmd1 := exec.Command("echo", "Please log in")
        }
        else {
        if strings.Contains(msg, "SignUp") {
             cmd1 := exec.Command("echo", "Please SignUp")
          }
        }
       var out bytes.Buffer
       var stderr bytes.Buffer
       cmd1.Stdout = &out
       cmd1.Stderr = &stderr
       err1 := cmd1.Run()
      if err1 != nil {
         fmt.Println(fmt.Sprint(err1) + " ##:## " + stderr.String() + "#####" + out.String())
        return
    }

如果收到登录消息,我希望echo命令带“Please login in”,如果消息是SignUp,我希望“Please SignUp”。

当我尝试上面的代码时,它说cmd1已声明但未使用。 我该如何删除此错误?什么是错误的原因?  我已经走了很多堆栈溢出的答案,但没有任何帮助。

2 个答案:

答案 0 :(得分:1)

=

除了将:=与前一个else放在同一行之外,您还需要确保不使用}而不是« <a href="/page-2010">Previous</a>|<a href="/page-2012">Next</a> » 重新声明cmd1。< / p>

答案 1 :(得分:0)

Go是使用块的词法范围。您正在使用短变量声明语法在每个cmd1块中声明一个新的if变量。使用=

将值分配给现有变量
var cmd1 *exec.Cmd
msg = receive_cmd()
if strings.Contains(msg, "Log-In") {
    cmd1 = exec.Command("echo", "Please log in")
} else if strings.Contains(msg, "SignUp") {
    cmd1 = exec.Command("echo", "Please SignUp")
}