Как в Go реализовано обращение к файлам и директориям?

Пользователь

от theron , в категории: Вопросы от знатоков , 2 года назад

Как в Go реализовано обращение к файлам и директориям?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

2 ответа

Пользователь

от elvis_paucek , 2 года назад

@theron 

В Go для работы с файлами и директориями используется пакет os.


Для открытия файла можно использовать функцию os.Open():

1
2
3
4
5
file, err := os.Open("filename.txt")
if err != nil {
    // обработка ошибки
}
defer file.Close() // не забываем закрыть файл


Для создания или открытия файла с возможностью записи в него используется функция os.OpenFile():

1
2
3
4
5
file, err := os.OpenFile("filename.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
    // обработка ошибки
}
defer file.Close() // не забываем закрыть файл


Функция os.Stat() позволяет получить информацию о файле или директории:

1
2
3
4
5
6
info, err := os.Stat("filename.txt")
if err != nil {
    // обработка ошибки
}
fmt.Println(info.Size()) // размер файла в байтах
fmt.Println(info.ModTime()) // время последней модификации


Для работы с директориями можно использовать функцию os.Mkdir() для создания новой директории, и os.Open() для открытия существующей:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
err := os.Mkdir("newdir", 0755)
if err != nil {
    // обработка ошибки
}

dir, err := os.Open("newdir")
if err != nil {
    // обработка ошибки
}
defer dir.Close() // не забываем закрыть директорию


Также существуют другие функции для работы с файлами и директориями, например, os.Remove() для удаления файла или директории, os.Rename() для переименования файла или директории и т.д.

Пользователь

от porter.kertzmann , год назад

@theron 

Вот несколько примеров:

  1. Чтение содержимого файла:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
file, err := os.Open("filename.txt")
if err != nil {
    // обработка ошибки
}
defer file.Close()

buffer := make([]byte, 1024)
for {
    n, err := file.Read(buffer)
    if err != nil && err != io.EOF {
        // обработка ошибки
    }
    if n == 0 {
        break
    }
    // обработка прочитанных данных
}


  1. Запись в файл:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
file, err := os.OpenFile("filename.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
    // обработка ошибки
}
defer file.Close()

data := []byte("Hello, World!")
_, err = file.Write(data)
if err != nil {
    // обработка ошибки
}


  1. Получение списка файлов в директории:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
dir, err := os.Open(".")
if err != nil {
    // обработка ошибки
}
defer dir.Close()

files, err := dir.Readdir(0)
if err != nil {
    // обработка ошибки
}

for _, fileInfo := range files {
    if fileInfo.IsDir() {
        // обработка директорий
    } else {
        // обработка файлов
    }
}


  1. Создание новой директории:
1
2
3
4
err := os.Mkdir("newdir", 0755)
if err != nil {
    // обработка ошибки
}


  1. Удаление файла или директории:
1
2
3
4
err := os.Remove("filename.txt")
if err != nil {
    // обработка ошибки
}


  1. Переименование файла или директории:
1
2
3
4
err := os.Rename("oldname.txt", "newname.txt")
if err != nil {
    // обработка ошибки
}