В этом примере отложенная функция увеличивает возвращаемое значение I после возврата окружающей функции. Таким образом, эта функция возвращает 2:
func c() (i int) {
defer func() { i++ }()
return 1
}
Как получается, что это возвращает 2?
В блоге go Defer, Pani c и Recover
Отложенные функции могут считывать и присваивать именованные возвращаемые значения возвращаемой функции.
Я предполагаю, что намерение программиста - вернуть 1 в качестве результата, и удивляться, почему оно переопределяется, и какое дизайнерское решение стоит за ним.