Golang: Работаем с файлами
Давайте рассмотрим, как вы можете эффективно читать и записывать файлы в своей файловой системе, используя язык программирования go. Метод, который мы будем использовать для чтения и записи в файлы, будет универсальными. Это означает, что вы сможете использовать эти методы, чтобы читать и писать .txt, .csv, .xls и т. д., единственное, что отличается для этих файлов, - это структура данные, которую вы будете использовать.
Чтение файлов
Чтобы читать файлы в локальной файловой системе, вам нужно будет использовать модуль io/ioutil. Сначала вам нужно вытащить содержимое файла в память, вызвав ioutil.ReadFile("/path/to/my/file.ext"), который примет путь к файлу, который вы хотите прочитать, так как это только параметр. Это вернет либо данные файла, либо err, которые могут быть обработаны.
Создайте новый файл main.go, а также localfile.data. Добавьте случайный фрагмент текста в файл localfile.data, а затем выполните следующие:
package main
// Импортирум модули
import (
"fmt"
"io/ioutil"
)
func main() {
// Зачитываем содержимое файла
data, err := ioutil.ReadFile("localfile.data")
// Если во время считывания файла произошла ошибка
// выводим ее
if err != nil {
fmt.Println(err)
}
// Если чтение данных прошло успено
// выводим их в консоль
fmt.Print(string(data))
}
Теперь давайте запустим наш файл:
go run main.go
Запись в файл
Чтобы писать контент в файлы с помощью Go, нам снова придется использовать модуль io/ioutil. Сначала нам нужно построить массив байтов, который представляет содержимое, которое мы хотим сохранить в наших файлах.
mydata := []byte("all my data I want to write to a file")
После того, как мы создали массив байтов, мы можем вызвать ioutil.WriteFile(), чтобы записать данные в файл. Метод WriteFile() принимает 3 параметра, первый - это путь к файлу в который мы будем записывать данные, второй - это объект mydata, а третий - это FileMode.
// метод WriteFile возвращает ошибку, если запись не удалась
err := ioutil.WriteFile("myfile.data", mydata, 0777)
if err != nil {
// Если произошла ошибка выводим ее в консоль
fmt.Println(err)
}
Давайте расширим наш предыдущий файл main.go, чтобы не только читать, но и записывать в файл:
package main
import (
"fmt"
"io/ioutil"
)
func main() {
mydata := []byte("All the data I wish to write to a file")
err := ioutil.WriteFile("myfile.data", mydata, 0777)
// Обработка ошибки
if err != nil {
// print it out
fmt.Println(err)
}
data, err := ioutil.ReadFile("myfile.data")
if err != nil {
fmt.Println(err)
}
fmt.Print(string(data))
}
Если вы сейчас попытаетесь выполнить команду go run main.go, вы должны увидеть, что новый файл автоматически создается в вашем текущем каталоге с именем myfile.data, и наша программа go переходит к чтению из этого вновь созданного файла и печатает содержимое в консоль:
➜ go run main.go All the data I wish to write to a file