оператор инициализации if с методами, которые имеют несколько возвращаемых значений - PullRequest
0 голосов
/ 23 ноября 2018

Я хотел бы иметь оператор инициализации в моем операторе 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 на два, что уродливо?

1 Ответ

0 голосов
/ 23 ноября 2018

Вы не можете использовать синтаксис выше.

Вы можете использовать область видимости с фигурными скобками, как это.

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
        }
    }
}
...