@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()
для переименования файла или директории и т.д.
@theron
Вот несколько примеров:
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 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 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 2 3 4 |
err := os.Mkdir("newdir", 0755) if err != nil { // обработка ошибки } |
1 2 3 4 |
err := os.Remove("filename.txt") if err != nil { // обработка ошибки } |
1 2 3 4 |
err := os.Rename("oldname.txt", "newname.txt") if err != nil { // обработка ошибки } |