С помощью вспомогательной функции вы можете.
Создайте вспомогательную функцию, которая возвращает вторую bool
возвращаемого значения, например:
func check(dummy interface{}, ok bool) bool {
return ok
}
и его использования:
if check(f()) && check(g()) && h() && check(i()) {
doStuff()
}
Обратите внимание, что это эквивалентно исходному код, потому что оператор &&
является оценивается слева направо и используется short-circuit evaluation: если какой-либо из операндов оценивается в false
, дальнейшие операнды (функции) не будут вызываться.
Эта функция check()
работает для всех функций, возвращающих 2 значения, а вторая имеет тип bool
(поскольку любое значение может быть присвоено переменной типа interface{}
).
Это описано в Spec: Calls:
В особом случае, если возвращаемые значения функции или метода g
равны по количеству и по отдельности, присваиваемые параметрам другой функции или метода f
, то вызов f(g(parameters_of_g))
будет вызывать f
после привязки возвращаемых значений g
к параметрам f
по порядку. Вызов f
не должен содержать никаких параметров, кроме вызова g
, а g
должен иметь как минимум одно возвращаемое значение. Если f
имеет окончательный параметр ...
, ему присваиваются возвращаемые значения g
, которые остаются после назначения регулярных параметров.
Примечание: так как первый параметр в check()
не используется, можно даже использовать пустой идентификатор, называя его, который сделает это очевидно, что мы не используем этот параметр:
func check(_ interface{}, ok bool) bool {
return ok
}
В частности, заявитель сказал, что он не может вернуться в свое время. – icza