一、defer 原则 首先defer 后面通常只会跟一个函数调用, 这个函数调用主要是下面这种: defer func() { fmt.Println("start") }() 假如在这个函数中出现了一个变量, 那么我们需要分析这个变量的位置 如果是在函数参数的位置, 那么这个变量会被复制: func test5() { i := 1 defer func(i int) { i += 1 }(i) } 如果变量位于函数体中的, 那么会分析这个变量从哪一个地方来 func