Аргументы отложенной функции вычисляются в момент вызова defer, а не при выходе из функции. defer f(x) - x вычисляется сразу. Чтобы передать значение на момент выхода, используют замыкание: defer func() { f(x) }() или defer func(v int) { f(v) }(x).