Source file src/io/ioutil/ioutil.go
1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Package ioutil implements some I/O utility functions. 6 // 7 // Deprecated: As of Go 1.16, the same functionality is now provided 8 // by package [io] or package [os], and those implementations 9 // should be preferred in new code. 10 // See the specific function documentation for details. 11 package ioutil 12 13 import ( 14 "io" 15 "io/fs" 16 "os" 17 "slices" 18 "strings" 19 ) 20 21 // ReadAll reads from r until an error or EOF and returns the data it read. 22 // A successful call returns err == nil, not err == EOF. Because ReadAll is 23 // defined to read from src until EOF, it does not treat an EOF from Read 24 // as an error to be reported. 25 // 26 // Deprecated: As of Go 1.16, this function simply calls [io.ReadAll]. 27 // 28 //go:fix inline 29 func ReadAll(r io.Reader) ([]byte, error) { 30 return io.ReadAll(r) 31 } 32 33 // ReadFile reads the file named by filename and returns the contents. 34 // A successful call returns err == nil, not err == EOF. Because ReadFile 35 // reads the whole file, it does not treat an EOF from Read as an error 36 // to be reported. 37 // 38 // Deprecated: As of Go 1.16, this function simply calls [os.ReadFile]. 39 // 40 //go:fix inline 41 func ReadFile(filename string) ([]byte, error) { 42 return os.ReadFile(filename) 43 } 44 45 // WriteFile writes data to a file named by filename. 46 // If the file does not exist, WriteFile creates it with permissions perm 47 // (before umask); otherwise WriteFile truncates it before writing, without changing permissions. 48 // 49 // Deprecated: As of Go 1.16, this function simply calls [os.WriteFile]. 50 // 51 //go:fix inline 52 func WriteFile(filename string, data []byte, perm fs.FileMode) error { 53 return os.WriteFile(filename, data, perm) 54 } 55 56 // ReadDir reads the directory named by dirname and returns 57 // a list of fs.FileInfo for the directory's contents, 58 // sorted by filename. If an error occurs reading the directory, 59 // ReadDir returns no directory entries along with the error. 60 // 61 // Deprecated: As of Go 1.16, [os.ReadDir] is a more efficient and correct choice: 62 // it returns a list of [fs.DirEntry] instead of [fs.FileInfo], 63 // and it returns partial results in the case of an error 64 // midway through reading a directory. 65 // 66 // If you must continue obtaining a list of [fs.FileInfo], you still can: 67 // 68 // entries, err := os.ReadDir(dirname) 69 // if err != nil { ... } 70 // infos := make([]fs.FileInfo, 0, len(entries)) 71 // for _, entry := range entries { 72 // info, err := entry.Info() 73 // if err != nil { ... } 74 // infos = append(infos, info) 75 // } 76 func ReadDir(dirname string) ([]fs.FileInfo, error) { 77 f, err := os.Open(dirname) 78 if err != nil { 79 return nil, err 80 } 81 list, err := f.Readdir(-1) 82 f.Close() 83 if err != nil { 84 return nil, err 85 } 86 slices.SortFunc(list, func(a, b os.FileInfo) int { 87 return strings.Compare(a.Name(), b.Name()) 88 }) 89 return list, nil 90 } 91 92 // NopCloser returns a ReadCloser with a no-op Close method wrapping 93 // the provided Reader r. 94 // 95 // Deprecated: As of Go 1.16, this function simply calls [io.NopCloser]. 96 // 97 //go:fix inline 98 func NopCloser(r io.Reader) io.ReadCloser { 99 return io.NopCloser(r) 100 } 101 102 // Discard is an io.Writer on which all Write calls succeed 103 // without doing anything. 104 // 105 // Deprecated: As of Go 1.16, this value is simply [io.Discard]. 106 var Discard io.Writer = io.Discard 107