ZIP является популярным форматом архивации сжатых данных. Обычно ZIP используется, когда приложению нужно загрузить набор файлов или когда нужно экспортировать добавленные в zip-архив файлы в качестве вывода. В данной инструкции показано, как работать с ZIP архивами, используя стандартную библиотеку Go.
Создаем ZIP архив в Golang
1. Создайте файл zip.go
со следующим содержимым:
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
package main import ( "archive/zip" "bytes" "fmt" "io" "io/ioutil" "log" "os" ) func main() { var buff bytes.Buffer // Сжатие данных zipW := zip.NewWriter(&buff) f, err := zipW.Create("newfile.txt") if err != nil { panic(err) } _, err = f.Write([]byte("Это содержимое моего файла")) if err != nil { panic(err) } err = zipW.Close() if err != nil { panic(err) } // Запись данных в архив err = ioutil.WriteFile("data.zip", buff.Bytes(), os.ModePerm) if err != nil { panic(err) } // Распаковка содержимого архива zipR, err := zip.OpenReader("data.zip") if err != nil { panic(err) } for _, file := range zipR.File { fmt.Println("Файл " + file.Name + " содержит следующее:") r, err := file.Open() if err != nil { log.Fatal(err) } _, err = io.Copy(os.Stdout, r) if err != nil { panic(err) } err = r.Close() if err != nil { panic(err) } fmt.Println() } } |
2. Запустите код через go run zip.go
;
3. Посмотрите на результат в терминале:
1 2 |
Файл newfile.txt содержит следующее: Это содержимое моего файла |
Как прочесть содержимое ZIP архива в Golang?
Встроенный пакет zip
содержит функции NewWriter
для сжатия данных, а также zip.Reader
для распаковывания сжатого содержимого. Каждая запись в ZIP архив выполняется при помощи метода Create
созданного zip.Writer
. Возвращаемый Writer
затем используется для записи данных.
Для распаковки файлов из zip архива используется функция OpenReader
для создания экземпляра ReadCloser
для каждой записи из архива. Поле File
созданного ReaderCloser
является срезом от zip.File
. Содержимое файла можно получить через вызов метода Open
и через чтение возвратившегося ReadCloser
.
На заметку: Папки можно создать через добавление слеша
/
к названию файла в методеCreate
. Например, такfolder/newfile.txt
.
Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»