ioutil will be fully deprecated in Go 1.16. Although these APIs will continue to exist due to the compatibility guarantee, they are no longer recommended for use. So the question is: what should we use instead? Here are all the APIs in the ioutil package:
1
2
3
4
5
6
7
8
9
10
11
12
|
package ioutil
var Discard io.Writer
func NopCloser(r io.Reader) io.ReadCloser
func ReadAll(r io.Reader) ([]byte, error)
func ReadDir(dirname string) ([]os.FileInfo, error)
func ReadFile(filename string) ([]byte, error)
func WriteFile(filename string, data []byte, perm os.FileMode) error
func TempDir(dir, pattern string) (name string, err error)
func TempFile(dir, pattern string) (f *os.File, err error)
|
The corresponding replacement APIs in 1.16:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package io
var Discard Writer
func NopCloser(r Reader) ReadCloser
func ReadAll(r Reader) ([]byte, error)
package os
func ReadDir(name string) ([]DirEntry, error)
func ReadFile(name string) ([]byte, error)
func WriteFile(name string, data []byte, perm fs.FileMode) error
func MkdirTemp(dir, pattern string) (string, error)
func CreateTemp(dir, pattern string) (f *File, err error)
|
In summary, three key changes:
- Discard, NopCloser, ReadAll have been moved to the
io package
- ReadDir, ReadFile, WriteFile have been moved to the
os package
- TempDir, TempFile have been renamed to MkdirTemp, CreateTemp and moved to the
os package
ioutil 将在 Go 1.16 中被彻底弃用,虽然由于兼容性保障这些 API 还会继续存在,但不再被推荐使用了。那么问题来了,我们应该用什么?这是 ioutil 包所有的 API:
1
2
3
4
5
6
7
8
9
10
11
12
|
package ioutil
var Discard io.Writer
func NopCloser(r io.Reader) io.ReadCloser
func ReadAll(r io.Reader) ([]byte, error)
func ReadDir(dirname string) ([]os.FileInfo, error)
func ReadFile(filename string) ([]byte, error)
func WriteFile(filename string, data []byte, perm os.FileMode) error
func TempDir(dir, pattern string) (name string, err error)
func TempFile(dir, pattern string) (f *os.File, err error)
|
1.16 中取而代之的与之对应的 API:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package io
var Discard Writer
func NopCloser(r Reader) ReadCloser
func ReadAll(r Reader) ([]byte, error)
package os
func ReadDir(name string) ([]DirEntry, error)
func ReadFile(name string) ([]byte, error)
func WriteFile(name string, data []byte, perm fs.FileMode) error
func MkdirTemp(dir, pattern string) (string, error)
func CreateTemp(dir, pattern string) (f *File, err error)
|
总结起来就是三点:
- Discard, NopCloser, ReadAll 挪到了 io 包中
- ReadDir, ReadFile, WriteFile 挪到了 os 包中
- TempDir, TempFile 更名为了 MkdirTemp, CreateTemp 并挪到了 os 包中