Golang syntax error : assignment mismatch: 4 variables but 2 values

Golang syntax error : assignment mismatch: 4 variables but 2 values

下面的代码产生编译错误。

在与这个错误纠缠了几个小时之后,我仍然不知道该怎么办。

这是一个产生相同错误的简化示例:

package main
import(
    "fmt"
)

func a() (int,bool) {
    return 3,true
}
func b() (int,bool) {
    return 4,true
}
func main(){
    if k,ok1,h,ok2 := a(),b(); ok1 && ok2 && k==3 && h==4 {
        fmt.Printf("ok!")
    }else{
        fmt.Printf("fail!")
    }
}

显然,k,ok1,h,ok2 := a(),b(); 会导致此错误。 但我不知道该怎么做 修改这段代码。

出于某种原因,我无法将此赋值语句移出 if-else 块。 有什么办法可以解决这个问题吗?

这是语言规范中的相关部分:

https://golang.org/ref/spec#Assignments

简而言之:

k,ok1,h,ok2 := a(),b()

go 语法无效。 “...右手操作数是一个单一的多值表达式...”。上面,你有两个表达式。你必须单独做作业:

k, ok1:=a()
h, ok2:=b()

并且 if 语句变为:

if ok1 && ok2 && k==3 && h==4  {
}

如果您不希望这些变量超出该范围,请执行以下操作:

{
  k, ok1:=a()
  h, ok2:=b()
  if ok1 && ok2 && k==3 && h==4  {  
  }
}