Пакет ioutil
Обзор
Пакет ioutil реализует некоторые служебные функции ввода-вывода.
Устаревшее: Начиная с Go 1.16, аналогичные функции теперь предоставляются пакетом io или пакетом os, и их реализации следует предпочитать в новом коде. Подробности см. в документации конкретной функции.
Индекс
Файлы пакета
ioutil.go tempfile.go
Переменные
Discard — это io.Writer, для которого все вызовы Write завершаются успешно, но ничего не делают.
Устаревшее: Начиная с Go 1.16, это значение просто io.Discard.
var Discard io.Writer = io.Discard
func NopCloser
func NopCloser(r io.Reader) io.ReadCloser
NopCloser возвращает ReadCloser с методом Close без действий, оборачивающим предоставленный Reader r.
Устаревшее: Начиная с Go 1.16, эта функция просто вызывает io.NopCloser.
func ReadAll
func ReadAll(r io.Reader) ([]byte, error)
ReadAll считывает из r до ошибки или EOF и возвращает прочитанные данные. Успешный вызов возвращает err == nil, а не err == EOF. Поскольку ReadAll определен для чтения из источника до EOF, он не обрабатывает EOF из Read как ошибку, подлежащую сообщению.
Устаревшее: Начиная с Go 1.16, эта функция просто вызывает io.ReadAll.
Пример
Код:
r := strings.NewReader("Go is a general-purpose language designed with systems programming in mind.")
b, err := ioutil.ReadAll(r)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s", b)
Вывод:
Go is a general-purpose language designed with systems programming in mind.
func ReadDir
func ReadDir(dirname string) ([]fs.FileInfo, error)
ReadDir считывает директорию, указанную dirname, и возвращает список fs.FileInfo для содержимого директории, отсортированный по имени файла. Если при чтении директории возникает ошибка, ReadDir возвращает пустой список записей директорий вместе с ошибкой.
Устаревшее: Начиная с Go 1.16, os.ReadDir — более эффективный и корректный выбор: он возвращает список fs.DirEntry вместо fs.FileInfo, а в случае ошибки в середине чтения директории он возвращает частичные результаты.
Если вам по-прежнему нужно получить список fs.FileInfo, вы все равно можете:
entries, err := os.ReadDir(dirname)
if err != nil { ... }
infos := make([]fs.FileInfo, 0, len(entries))
for _, entry := range entries {
info, err := entry.Info()
if err != nil { ... }
infos = append(infos, info)
}
Пример
Код:
files, err := ioutil.ReadDir(".")
if err != nil {
log.Fatal(err)
}
for _, file := range files {
fmt.Println(file.Name())
}
func ReadFile
func ReadFile(filename string) ([]byte, error)
ReadFile считывает файл, указанный filename, и возвращает содержимое. Успешный вызов возвращает err == nil, а не err == EOF. Поскольку ReadFile считывает весь файл, он не обрабатывает EOF из Read как ошибку, подлежащую сообщению.
Устаревшее: Начиная с Go 1.16, эта функция просто вызывает os.ReadFile.
Пример
Код:
content, err := ioutil.ReadFile("testdata/hello")
if err != nil {
log.Fatal(err)
}
fmt.Printf("File contents: %s", content)
Вывод:
File contents: Hello, Gophers!
func TempDir
func TempDir(dir, pattern string) (name string, err error)
TempDir создаёт новую временную директорию в директории dir. Имя директории генерируется путём добавления случайной строки к pattern. Если pattern включает «*», то случайная строка заменяет последний «*». TempDir возвращает имя новой директории. Если dir пустая строка, TempDir использует стандартную директорию для временных файлов (см. os.TempDir). Несколько программ, одновременно вызывающих TempDir, не выберут одну и ту же директорию. Ответственность за удаление директории лежит на вызывающей программе.
Устаревшее: Начиная с Go 1.17, эта функция просто вызывает os.MkdirTemp.
Пример
Код:
content := []byte("temporary file's content")
dir, err := ioutil.TempDir("", "example")
if err != nil {
log.Fatal(err)
}
defer os.RemoveAll(dir) // clean up
tmpfn := filepath.Join(dir, "tmpfile")
if err := ioutil.WriteFile(tmpfn, content, 0666); err != nil {
log.Fatal(err)
}
Пример (Суффикс)
Код:
parentDir := os.TempDir()
logsDir, err := ioutil.TempDir(parentDir, "*-logs")
if err != nil {
log.Fatal(err)
}
defer os.RemoveAll(logsDir) // clean up
// Logs can be cleaned out earlier if needed by searching
// for all directories whose suffix ends in *-logs.
globPattern := filepath.Join(parentDir, "*-logs")
matches, err := filepath.Glob(globPattern)
if err != nil {
log.Fatalf("Failed to match %q: %v", globPattern, err)
}
for _, match := range matches {
if err := os.RemoveAll(match); err != nil {
log.Printf("Failed to remove %q: %v", match, err)
}
}
func TempFile
func TempFile(dir, pattern string) (f *os.File, err error)
TempFile создаёт новый временный файл в директории dir, открывает файл для чтения и записи и возвращает полученный *os.File. Имя файла генерируется путём добавления случайной строки к pattern. Если pattern включает «*», то случайная строка заменяет последний «*». Если dir пустая строка, TempFile использует стандартную директорию для временных файлов (см. os.TempDir). Несколько программ, одновременно вызывающих TempFile, не выберут один и тот же файл. Вызывающая программа может использовать f.Name() для поиска пути к файлу. Ответственность за удаление файла лежит на вызывающей программе.
Устаревшее: Начиная с Go 1.17, эта функция просто вызывает os.CreateTemp.
Пример
Код:
content := []byte("temporary file's content")
tmpfile, err := ioutil.TempFile("", "example")
if err != nil {
log.Fatal(err)
}
defer os.Remove(tmpfile.Name()) // clean up
if _, err := tmpfile.Write(content); err != nil {
log.Fatal(err)
}
if err := tmpfile.Close(); err != nil {
log.Fatal(err)
}
Пример (Суффикс)
Код:
content := []byte("temporary file's content")
tmpfile, err := ioutil.TempFile("", "example.*.txt")
if err != nil {
log.Fatal(err)
}
defer os.Remove(tmpfile.Name()) // clean up
if _, err := tmpfile.Write(content); err != nil {
tmpfile.Close()
log.Fatal(err)
}
if err := tmpfile.Close(); err != nil {
log.Fatal(err)
}
func WriteFile
func WriteFile(filename string, data []byte, perm fs.FileMode) error
WriteFile записывает данные в файл, указанный filename. Если файл не существует, WriteFile создаёт его с правами perm (после umask); в противном случае WriteFile обнуляет его перед записью, не изменяя права.
Устаревшее: Начиная с Go 1.16, эта функция просто вызывает os.WriteFile.
Пример
Код:
message := []byte("Hello, Gophers!")
err := ioutil.WriteFile("hello", message, 0644)
if err != nil {
log.Fatal(err)
}
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/io/ioutil/