我有以下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已声明但未使用。 我该如何删除此错误?什么是错误的原因? 我已经走了很多堆栈溢出的答案,但没有任何帮助。
答案 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")
}