Golang语法错误:赋值不匹配:4个变量但2个值

Golang语法错误:赋值不匹配:4个变量但2个值,go,syntax-error,variable-assignment,Go,Syntax Error,Variable Assignment,下面的代码产生编译错误 在与这个错误搏斗了几个小时之后,我仍然不知道该怎么处理这个问题 下面是一个产生相同错误的简化示例: 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 &&a

下面的代码产生编译错误

在与这个错误搏斗了几个小时之后,我仍然不知道该怎么处理这个问题

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

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块。
有什么办法可以解决这个问题吗?

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

简言之:

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  {  
  }
}
如果允许的话,这将是危险的,因为它可能会导致微妙的错误。