Пакет os языка программирования Go

Пакет os предоставляет платформонезависимый интерфейс к функциональности операционной системы.

Пакет os предоставляет платформонезависимый интерфейс к функциональности операционной системы. Дизайн Unix-подобный, хотя обработка ошибок Go-подобная; неудачные вызовы возвращают значения типа error, а не номера ошибок. Часто в ошибке содержится больше информации. Например, если вызов, принимающий имя файла, не работает, например Open или Stat, ошибка будет включать имя файла, который не работает, и будет иметь тип *PathError, который может быть распакован для получения дополнительной информации.

Интерфейс os должен быть единообразным для всех операционных систем. Функции, которые не являются общедоступными, представлены в специфическом для системы пакете syscall.

Приведем простой пример: открытие файла и чтение его части.

file, err := os.Open("file.go") // For read access.
if err != nil {
	log.Fatal(err)
}

Если открытие завершится неудачей, строка ошибки будет иметь понятный вид, например

open file.go: no such file or directory

Затем данные файла могут быть считаны в виде фрагмента байтов. Команды Read и Write берут количество байтов из длины фрагмента аргумента.

data := make([]byte, 100)
count, err := file.Read(data)
if err != nil {
log.Fatal(err)
}
fmt.Printf("read %d bytes: %q\n", count, data[:count])

Concurrency (Параллелизм)

Методы File соответствуют операциям файловой системы. Все они безопасны для одновременного использования. Максимальное количество одновременных операций над файлом может быть ограничено ОС или системой. Это число должно быть большим, но его превышение может снизить производительность или вызвать другие проблемы.

Константы


const (
    // Должно быть указано ровно одно из значений O_RDONLY, O_WRONLY или O_RDWR.
    O_RDONLY int = syscall.O_RDONLY // открыть файл только для чтения.
    O_WRONLY int = syscall.O_WRONLY // открыть файл только для записи.
	O_RDWR   int = syscall.O_RDWR   // открыть файл для чтения и записи.
    // Остальные значения могут быть объединены с помощью оператора OR для управления поведением.
    O_APPEND int = syscall.O_APPEND // добавлять данные в файл при записи.
    O_CREATE int = syscall.O_CREAT  // создать новый файл, если его нет.
	O_EXCL   int = syscall.O_EXCL   // используется с O_CREATE, файл не должен существовать.
    O_SYNC   int = syscall.O_SYNC   // открыть для синхронного ввода-вывода.
    O_TRUNC  int = syscall.O_TRUNC  // усечь обычный файл с правом записи при открытии.
)

Флаги для OpenFile, оборачивающие флаги базовой системы. Не все флаги могут быть реализованы в данной системе.

Просмотреть исходный код const ( PathSeparator = „/“ // разделитель путей, специфичный для ОС PathListSeparator = „:“ // разделитель списка путей, специфичный для ОС)

const (
    // Одиночные буквы являются аббревиатурами,
    // используемыми для форматирования методом String.
	ModeDir        = fs.ModeDir        // d: каталог
    ModeAppend     = fs.ModeAppend     // a: только добавление
    ModeExclusive  = fs.ModeExclusive  // l: исключительное использование
    ModeTemporary  = fs.ModeTemporary  // T: временный файл; только Plan 9
    ModeSymlink    = fs.ModeSymlink    // L: символическая ссылка
	ModeDevice     = fs.ModeDevice     // D: файл устройства
    ModeNamedPipe  = fs.ModeNamedPipe  // p: именованный канал (FIFO)
    ModeSocket     = fs.ModeSocket     // S: сокет домена Unix
    ModeSetuid     = fs.ModeSetuid     // u: setuid
	ModeSetgid     = fs.ModeSetgid     // g: setgid
    ModeCharDevice = fs.ModeCharDevice // c: символьное устройство Unix, когда установлен ModeDevice
    ModeSticky     = fs.ModeSticky     // t: sticky
    ModeIrregular  = fs.ModeIrregular  // ?: нерегулярный файл; ничего больше не известно об этом файле

	// Маска для битов типа. Для обычных файлов не будет установлено ничего.
    ModeType = fs.ModeType

    ModePerm = fs.ModePerm // Биты разрешений Unix, 0o777
	)

Определенные биты режима файла являются наиболее значимыми битами FileMode. Девять наименее значимых битов являются стандартными разрешениями Unix rwxrwxrwx. Значения этих битов следует рассматривать как часть общедоступного API и могут использоваться в протоколах передачи данных или представлениях диска: их нельзя изменять, хотя могут быть добавлены новые биты.

const DevNull = "/dev/null"

DevNull — это имя «нулевого устройства» операционной системы. В Unix-подобных системах оно имеет вид «/dev/null», в Windows — «NUL».

Переменные

var (
    // ErrInvalid указывает на недействительный аргумент.
    // Методы File возвращают эту ошибку, когда получатель равен nil.
    ErrInvalid = fs.ErrInvalid // «недействительный аргумент»

    ErrPermission = fs.ErrPermission // «разрешение отказано»
    ErrExist      = fs.ErrExist      // «файл уже существует»
	ErrNotExist   = fs.ErrNotExist   // «файл не существует»
    ErrClosed     = fs.ErrClosed     // «файл уже закрыт»

    ErrNoDeadline       = errNoDeadline()       // «тип файла не поддерживает срок»
    ErrDeadlineExceeded = errDeadlineExceeded() // «тайм-аут ввода-вывода»
)

Портативные аналоги некоторых распространенных ошибок системных вызовов.

Ошибки, возвращаемые из этого пакета, можно проверить на наличие этих ошибок с помощью errors.Is.

var (
    Stdin  = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
    Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout")
	Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr"))

Stdin, Stdout и Stderr — открытые файлы, указывающие на дескрипторы стандартного ввода, стандартного вывода и стандартных ошибок.

Обратите внимание, что среда выполнения Go записывает в стандартный файл ошибок сообщения о паниках и сбоях; закрытие Stderr может привести к тому, что эти сообщения будут отправляться в другое место, например в файл, открытый позже.

var Args []string

Args содержит аргументы командной строки, начиная с имени программы.

var ErrProcessDone = errors.New("os: process already finished")

ErrProcessDone указывает, что процесс завершен.