Spec-Zone.ru › Go

Пакет ioutil

  • import "io/ioutil"
  • Обзор
  • Указатель
  • Примеры

Обзор

Пакет ioutil реализует некоторые вспомогательные функции ввода-вывода.

Устарело: начиная с Go 1.16 аналогичная функциональность предоставляется пакетом io или пакетом os, и эти реализации следует предпочитать в новом коде. Подробности см. в документации к конкретным функциям.

Указатель

  • Переменные
  • func NopCloser(r io.Reader) io.ReadCloser
  • func ReadAll(r io.Reader) ([]byte, error)
  • func ReadDir(dirname string) ([]fs.FileInfo, error)
  • func ReadFile(filename string) ([]byte, error)
  • func TempDir(dir, pattern string) (name string, err error)
  • func TempFile(dir, pattern string) (f *os.File, err error)
  • func WriteFile(filename string, data []byte, perm fs.FileMode) error

Примеры

ReadAll
ReadDir
ReadFile
TempDir
TempDir (Suffix)
TempFile
TempFile (Suffix)
WriteFile

Файлы пакета

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, не выполняющим никаких действий (no-op), оборачивая переданный Reader r.

Устарело: начиная с Go 1.16 эта функция просто вызывает io.NopCloser.

func ReadAll

func ReadAll(r io.Reader) ([]byte, error)

ReadAll читает из r до возникновения ошибки или EOF и возвращает прочитанные данные. При успешном вызове возвращается err == nil, а не err == EOF. Поскольку ReadAll предназначен для чтения из src до 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 записывает data в файл с именем 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API