Показаны сообщения с ярлыком Пакет ioutil в Golang. Показать все сообщения
Показаны сообщения с ярлыком Пакет ioutil в Golang. Показать все сообщения

воскресенье, 19 июля 2020 г.

Пакет ioutil в Golang, функция WriteFile для записи в файл

func WriteFile(filename string, data []byte, perm os.FileMode) error

WriteFile записывает данные в файл с именем filename. Если файл не существует, WriteFile создает его с разрешениями perm (до umask); в противном случае WriteFile обрезает его перед записью.

Пример использования WriteFile

package main

import (
    "io/ioutil"
    "log"
)

func main() {
    message := []byte("Hello, Gophers!")
    err := ioutil.WriteFile("testdata/hello", message, 0644)
    if err != nil {
        log.Fatal(err)
    }
}


Читайте также:


Пакет ioutil в Golang, функция TempFile для создания временных файлов

func TempFile(dir, pattern string) (f *os.File, err error)

TempFile создает новый временный файл в каталоге dir, открывает файл для чтения и записи и возвращает полученный *os.File. Имя файла генерируется путем взятия pattern и добавления случайной строки в конец. Если pattern содержит "*", случайная строка заменяет последнюю "*". Если dir - пустая строка, TempFile использует каталог по умолчанию для временных файлов (полученный от функции os.TempDir). Несколько программ, вызывающих TempFile одновременно, не будут выбирать один и тот же файл. Вызывающая сторона может использовать f.Name(), чтобы найти путь к файлу. Вызывающий абонент должен удалить файл, когда он больше не нужен.

Пример использования TempFile

package main

import (
    "io/ioutil"
    "log"
    "os"
)

func main() {
    content := []byte("temporary file's content")
    tmpfile, err := ioutil.TempFile("", "example")
    if err != nil {
        log.Fatal(err)
    }

    defer os.Remove(tmpfile.Name()) // очистка

    if _, err := tmpfile.Write(content); err != nil {
        log.Fatal(err)
    }
    if err := tmpfile.Close(); err != nil {
        log.Fatal(err)
    }
}

Пример использования TempFile с суффиксом

package main

import (
    "io/ioutil"
    "log"
    "os"
)

func main() {
    content := []byte("temporary file's content")
    tmpfile, err := ioutil.TempFile("", "example.*.txt")
    if err != nil {
        log.Fatal(err)
    }

    defer os.Remove(tmpfile.Name()) // очистка

    if _, err := tmpfile.Write(content); err != nil {
        tmpfile.Close()
        log.Fatal(err)
    }
    if err := tmpfile.Close(); err != nil {
        log.Fatal(err)
    }
}


Читайте также:


купить игрушку gopher

Пакет ioutil в Golang, функция TempDir для создания временных каталогов

func TempDir(dir, pattern string) (name string, err error)

TempDir создает новый временный каталог в каталоге dir. Имя каталога генерируется путем взятия pattern и добавления случайной строки к концу. Если pattern содержит "*", случайная строка заменяет последнюю "*". TempDir возвращает имя нового каталога. Если dir - пустая строка, TempDir использует каталог по умолчанию для временных файлов (возвращаемый функцией os.TempDir). Несколько программ, вызывающих TempDir одновременно, не будут выбирать один и тот же каталог. Вызывающий абонент обязан удалить каталог, когда он больше не нужен.

Пример использования ioutil.TempDir

package main

import (
    "io/ioutil"
    "log"
    "os"
    "path/filepath"
)

func main() {
    content := []byte("temporary file's content")
    dir, err := ioutil.TempDir("", "example")
    if err != nil {
        log.Fatal(err)
    }

    defer os.RemoveAll(dir) // очистка

    tmpfn := filepath.Join(dir, "tmpfile")
    if err := ioutil.WriteFile(tmpfn, content, 0666); err != nil {
        log.Fatal(err)
    }
}

Пример использования ioutil.TempDir с суффиксом

package main

import (
    "io/ioutil"
    "log"
    "os"
    "path/filepath"
)

func main() {
    parentDir := os.TempDir()
    logsDir, err := ioutil.TempDir(parentDir, "*-logs")
    if err != nil {
        log.Fatal(err)
    }
    defer os.RemoveAll(logsDir) // очистка

    // Логи могут быть очищены раньше, если необходимо,
    // путем поиска всех каталогов с суффиксом *-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)
        }
    }
}


Читайте также:


купить игрушку gopher

Пакет ioutil в Golang, функции чтения

Функция ReadAll

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

ReadAll читает из r до ошибки или EOF и возвращает прочитанные данные. Успешный вызов возвращает err == nil, а не err == EOF. Поскольку ReadAll определен для чтения из src до EOF, он не рассматривает EOF из Read как ошибку, о которой будет сообщено.

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "strings"
)

func main() {
    r := strings.NewReader("ReadAll принимает io.Reader и возвращает []byte")

    b, err := ioutil.ReadAll(r)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("%s", b)

}

Вывод:

ReadAll принимает io.Reader и возвращает []byte

Функция ReadDir

func ReadDir(dirname string) ([]os.FileInfo, error)

ReadDir читает каталог с именем dirname и возвращает список записей каталога, отсортированных по имени файла.

package main

import (
    "fmt"
    "io/ioutil"
    "log"
)

func main() {
    files, err := ioutil.ReadDir(".")
    if err != nil {
        log.Fatal(err)
    }

    for _, file := range files {
        fmt.Println(file.Name())
    }
}

Вывод (зависит от окружения):

.dockerenv
__runsc_containers__
bin
dev
etc
home
lib
lib64
proc
root
sys
tmp
tmpfs
usr
var

Функция ReadFile

func ReadFile(filename string) ([]byte, error)

ReadFile читает файл с именем filename и возвращает его содержимое. Успешный вызов возвращает err == nil, а не err == EOF. Поскольку ReadFile читает весь файл, он не рассматривает EOF из Read как ошибку, о которой будет сообщено.

package main

import (
    "fmt"
    "io/ioutil"
    "log"
)

func main() {
    content, err := ioutil.ReadFile("testdata/hello")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("File contents: %s", content)

}

Вывод:

File contents: Hello world


Читайте также: