DevGang
Авторизоваться

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
#Golang
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

Сделайте первый шаг к новой профессии

Получить скидку