为什么 ioutil 包在 Go 1.16 中被标记为废弃？我在使用 Go 编程时遇到了这个问题。请给我一个简单的解释，最好能给出解决办法，并以三个反引号左右围住的方式给出一个替代函数的示例代码。注意，示例代码请使用 `os` 和 `io` 包来实现文件读取功能，谢谢！
user
```
package main

import (
	"io"
	"log"
	"os"
)

func main() {
	file, err := os.Open("example.txt")
	if err != nil {
		log.Fatalf("failed to open file: %s", err)
	}
	defer file.Close()

	buf := make([]byte, 512)
	result := make([]byte, 0, 512)

	for {
		n, err := file.Read(buf)
		result = append(result, buf[:n]...)
		if err == io.EOF {
			break
		}
		if err != nil && err != io.EOF {
			log.Fatalf("failed to read file: %s", err)
		}
	}

	log.Printf("file content: %s", string(result))
}
```

`ioutil` 包在 Go 1.16 中被标记为废弃，原因是为了提高 Go 语言的标准库的设计质量，鼓励采用更灵活的方法实现功能。`ioutil` 中的一些函数封装过度，导致了资源管理上的问题。使用 `os` 和 `io` 包可以更精细地控制文件资源的打开、读取以及关闭等细节。上面的代码展示了一个简单的文件读取示例。希望这个解答对你有帮助！
assistant