У меня есть некоторые проблемы с использованием 'defer' относительно возвращаемого значения.Я пытался запустить одну тестовую функцию по-другому (отличается только определение i), но результат другой.Итак, я запутался по поводу другого возвращаемого значения.Вот проблема:
функция 1:
package main
import "fmt"
func main() {
fmt.Println("a return:", a()) // return value: 0
}
func a() int {
var i int
defer func() {
i++
fmt.Println("a defer1:", i) // print " a defer1: 1"
}()
return i
}
возвращаемое значение:
a defer1: 1
a return: 0
функция 2:
package main
import "fmt"
func main() {
fmt.Println("a return:", a()) // return value: 1
}
func a() (i int) {
defer func() {
i++
fmt.Println("a defer1:", i) // print " a defer1: 1"
}()
return i
}
возвращаемое значение:
a defer1: 1
a return: 1
Одно из возвращаемых значений равно 0, другое равно 1. Итак, вопрос в том, в чем разница между двумя функциями.