8.1 defer的调用

一、defer的调用

  1. 确保调用在函数结束时发生

  2. 参数在defer语句时计算

  3. defer相当于一个栈,多个defer声明时,先声明的后输出

    func tryDefer() {
    	defer fmt.Println(1)
    	defer fmt.Println(2)
    	fmt.Println(3)
    }
    
    func main() {
    	tryDefer()
    }

    备注:输出结果:3 2 1

  4. 举例

    func writeFile(filename string) {
    	// 创建文件
    	file, err := os.Create(filename)
    	if err != nil {
    		panic(err)
    	}
    	// 关闭文件
    	defer file.Close()
    
    	// 使用bufio写入文件
    	writer := bufio.NewWriter(file)
    	// 关闭写入流
    	defer writer.Flush()
    
    	// 写入文件
    	f := fib.Fibonacci()
    	for i := 0; i < 20; i++ {
    		fmt.Fprintln(writer, f())
    	}
    }
    
    func main() {
    	writeFile("fib.txt")
    }

    备注:写入文件时候,使用defer的特性,直接定义好文件关闭,防止以后忘记

  5. 某个接口需要同时关闭时候,防止以后忘记,可以直接打开之后就关闭,用defer声明即可

Last updated

Was this helpful?