В последнем примере есть неоднозначность, является ли возвращение частью функции или оператора if. Если он интерпретируется как часть функции, то это будет синтаксическая ошибка, поскольку для оператора if нет тела.
if a (b) -> c
return
Может быть интерпретировано так, как вы ожидали:
if (a (b) -> c)
return
Или отступ return
понимается как продолжение анонимной функции:
if (a (b) -> c
return)
В этом случае он выдает ошибку, поскольку в go с оператором if нет тела.
Я не уверен, но я предполагаю, что он решает поместить return
внутри функции, так как это ближайший контекст, и он не был явно закрыт (например, с круглыми скобками).
В качестве альтернативы, достаточно безопасно использовать круглые скобки, как у вас, так как это приведет к ошибке компиляции, а не к непредвиденному поведению, которое будет трудно отладить.
Если все, что вы Если вы делаете return
внутри оператора if, вы можете использовать трейлинг if:
return if a (b) -> c
Или сначала выполнить функцию, а затем использовать результат в операторе if, чтобы сделать его более подробным:
* 102 3 *