首页 > 解决方案 > 具有多个返回值的方法的“if”初始化语句

问题描述

我想在我的if语句中有初始化语句,它实际上使用了几个返回多个值的方法。例子:

func HandleArgs(args ...interface{}) {
     // Some additional checks here

     if value1, ok1, value2, ok2 := args[0].(string), args[1].(string); ok1 && ok2 {
          // Do something
     }
}

Go 不允许我这样做,并以错误响应:

assignment mismatch: 4 variables but 2 values

考虑到编译器可以轻松处理一种返回 2 个值的方法,这更加令人困惑:

// it is OK!
if value, ok := args[0].(string); ok {
}

if除了将一个语句分成两个(这很丑)之外,还有什么方法可以做我想做的事情吗?

标签: if-statementgo

解决方案


您不能使用上面的语法。

您可以像这样使用带有花括号的范围。

func HandleArgs(args ...interface{}) {
    // Some additional checks here

    { 
        // This will ensure all values will be captured inside the following scope
        value1, ok1 := args[0].(string)
        value2, ok2 := args[1].(string)
        if ok1 && ok2 {
            // Do something
        }
    }
}

推荐阅读