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