# 12.7 用 defer 关闭文件

`defer` 关键字（参看 6.4）对于在函数结束时关闭打开的文件非常有用，例如下面的代码片段：

```go
func data(name string) string {
	f := os.Open(name, os.O_RDONLY, 0)
	defer f.Close() // idiomatic Go code!
	contents := io.ReadAll(f)
	return contents
}
```

在函数 return 后执行了 `f.Close()`

## 链接

- [目录](directory.md)
- 上一节：[用切片读写文件](12.6.md)
- 下一节：[使用接口的实际例子：fmt.Fprintf](12.8.md)
