go语言返回值 于defer的特殊原理
go中命令返回值代码
Defer 中修改 ✅ 可以在 defer 中修改返回值 ❌ defer 中无法修改
package mainimport "fmt"// 命名返回值:可以在 defer 中修改返回值
func namedWithDefer() (result int) {result = 1 // 初始值defer func() {result = 2 // 修改命名返回值fmt.Println("Defer: result is now", result)}()return result // 返回 2,不是 1!
}// 匿名返回值:defer 中无法修改返回值
func anonymousWithDefer() int {result := 1 // 局部变量defer func() {result = 2 // 只修改局部变量,不影响返回值fmt.Println("Defer: result is now", result)}()return result // 返回 1
}func main() {fmt.Println("命名返回值 + defer:", namedWithDefer())fmt.Println("匿名返回值 + defer:", anonymousWithDefer())
}