Rumah pembangunan bahagian belakang Golang Bagaimana untuk menggunakan bahasa Go untuk memampatkan dan menyahmampat fail?

Bagaimana untuk menggunakan bahasa Go untuk memampatkan dan menyahmampat fail?

Jun 09, 2023 pm 09:31 PM
pergi bahasa Buka zip Pemampatan fail

Dengan perkembangan teknologi komputer yang berterusan, pemprosesan fail telah menjadi bahagian penting dalam kerja harian pengguna komputer. Memandangkan jumlah storan fail terus meningkat, memampatkan fail telah menjadi operasi yang sangat diperlukan. Dalam proses ini, menggunakan bahasa Go untuk pemampatan dan penyahmampatan fail telah menjadi topik yang sangat membimbangkan.

Bahasa Go itu sendiri menyediakan perpustakaan standard yang kaya, yang termasuk fungsi alat yang berkaitan untuk memproses operasi fail. Oleh sebab itu, operasi pemampatan dan penyahmampatan fail menggunakan bahasa Go adalah sangat mudah berbanding dengan bahasa lain. Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk pemampatan dan penyahmampatan fail.

1. Pemampatan fail

Bahasa Go mempunyai dua cara untuk memampatkan fail: menggunakan pustaka standard untuk pemampatan fail dan menggunakan pustaka pihak ketiga untuk pemampatan fail.

  1. Gunakan pustaka standard untuk pemampatan fail

Dalam pustaka standard Go, terdapat pakej "compress", yang mengandungi pelaksanaan format pemampatan fail biasa, termasuk gzip, gzip, bz2, lzma, zstd, dsb. Pelaksanaan format mampatan ini dibungkus dalam subpakej berbeza dalam pakej "mampat". Subpakej yang berbeza melaksanakan format pemampatan yang berbeza. Pelaksanaan khusus adalah seperti berikut:

package main

import (
    "compress/gzip"
    "fmt"
    "os"
)

func main() {
    f, err := os.Create("test.txt.gz")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()

    gz := gzip.NewWriter(f)
    defer gz.Close()

    _, err = gz.Write([]byte("hello, world!"))
    if err != nil {
        fmt.Println(err)
        return
    }
}
Salin selepas log masuk

Dalam kod di atas, kami mencipta fail termampat bernama "test.txt.gz" dan menulis rentetan "hello, world!" Keseluruhan proses menggunakan fungsi "NewWriter" dan fungsi "Write" dalam subpakej gzip. Perlu diingat bahawa selepas mengendalikan fail, anda perlu menggunakan kata kunci tangguh untuk menutup fail, jika tidak, pemegang fail mungkin bocor.

  1. Gunakan perpustakaan pihak ketiga untuk pemampatan fail

Berbanding dengan perpustakaan standard, perpustakaan pihak ketiga menyediakan lebih banyak pelaksanaan format pemampatan fail dan lebih fleksibiliti . Pustaka pihak ketiga biasa termasuk "zip" dan "rar". Perpustakaan ini digunakan dengan cara yang sama seperti perpustakaan standard, kecuali nama pakej yang diimport adalah berbeza. Ambil pakej "zip" sebagai contoh:

package main

import (
    "archive/zip"
    "fmt"
    "os"
)

func main() {
    f, err := os.Create("test.zip")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()

    zw := zip.NewWriter(f)
    defer zw.Close()

    files := []struct {
        name, body string
    }{
        {"test.txt", "hello, world!"},
    }

    for _, file := range files {
        w, err := zw.Create(file.name)
        if err != nil {
            fmt.Println(err)
            return
        }
        _, err = w.Write([]byte(file.body))
        if err != nil {
            fmt.Println(err)
            return
        }
    }
}
Salin selepas log masuk

Dalam kod di atas, kami mencipta fail termampat bernama "test.zip" dan menambah fail bernama "test.txt" pada fail itu dan menulis rentetan "hello, dunia!" Proses ini dilaksanakan menggunakan fungsi "NewWriter" dan fungsi "Create" dalam pakej "zip".

2. Penyahmampatan fail

Bahasa Go menyediakan berbilang pakej yang berkaitan dengan pemampatan fail, dengan itu merealisasikan fungsi penyahmampatan fail dalam pelbagai format. Proses asas penyahmampatan ialah:

  1. Buka fail yang dimampatkan.
  2. Buat strim baca yang sepadan.
  3. Buat penyahmampat yang sepadan.
  4. Tulis data dibaca ke dalam strim kepada penyahmampat dan keluarkannya.
  5. Tutup fail dan sumber lain.
  6. Gunakan pustaka standard untuk penyahmampatan fail

Pakej "mampat" dalam pustaka standard melaksanakan penyahmampatan berbilang format pemampatan dan pustaka gzip sebelumnya ialah satu contoh. Dalam erti kata lain, ia bukan sahaja menyokong pemampatan fail, tetapi juga mempunyai fungsi penyahmampatan fail. Kaedah khusus adalah seperti berikut:

package main

import (
    "compress/gzip"
    "fmt"
    "io"
    "os"
)

func main() {
    f, err := os.Open("test.txt.gz")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()

    gz, err := gzip.NewReader(f)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer gz.Close()

    data := make([]byte, 1024)
    for {
        n, err := gz.Read(data)
        if err != nil && err != io.EOF {
            fmt.Println(err)
            return
        }
        if n == 0 {
            break
        }
        fmt.Print(string(data[:n]))
    }
}
Salin selepas log masuk

Dalam kod di atas, kami mula-mula membuka fail termampat bernama "test.txt.gz", dan kemudian gunakan fungsi "NewReader" dalam sub-pakej gzip untuk mencipta peranti nyahmampat. Fungsi "Baca" membaca data yang akan dikeluarkan dalam penyahmampat, menetapkannya kepada "data", dan mengeluarkannya melalui fungsi "fmt.Print".

  1. Gunakan perpustakaan pihak ketiga untuk penyahmampatan fail

Menggunakan perpustakaan pihak ketiga untuk penyahmampatan fail adalah serupa dengan pemampatan fail Anda hanya perlu mengimport pustaka penyahmampatan yang sepadan dengannya format fail yang sepadan. Ambil pakej "zip" sebagai contoh:

package main

import (
    "archive/zip"
    "fmt"
    "io"
    "os"
)

func main() {
    r, err := zip.OpenReader("test.zip")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer r.Close()

    for _, f := range r.File {
        rc, err := f.Open()
        if err != nil {
            fmt.Println(err)
            return
        }
        defer rc.Close()

        _, err = io.CopyN(os.Stdout, rc, int64(f.UncompressedSize64))
        if err != nil {
            fmt.Println(err)
            return
        }
    }
}
Salin selepas log masuk

Dalam kod di atas, kami mula-mula menggunakan fungsi "OpenReader" dalam pakej "zip" untuk membuka fail termampat bernama "test.zip" dan kemudian membaca dalam Senarai fail di dalamnya. Fungsi "Buka" mengembalikan jenis antara muka "io.ReadCloser", yang mewakili fail terbuka. Kita boleh menggunakan fungsi "Baca" jenis antara muka ini untuk membaca data yang dinyahmampat, dan kemudian mengeluarkannya terus melalui fungsi "io.CopyN".

Ringkasan

Seperti yang dapat dilihat daripada pengenalan di atas, proses menggunakan bahasa Go untuk memampatkan dan menyahmampat fail adalah sangat mudah dan boleh dilaksanakan menggunakan perpustakaan standard dan perpustakaan pihak ketiga. Sudah tentu, terdapat juga perbezaan prestasi tertentu dan perbezaan format antara fail mampat dan nyahmampat, yang memerlukan pembangun membuat pertukaran dan pilihan. Walau bagaimanapun, secara amnya, bahasa Go sangat mudah digunakan dan boleh memenuhi kebanyakan keperluan aplikasi.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan bahasa Go untuk memampatkan dan menyahmampat fail?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Apr 02, 2025 pm 02:03 PM

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apr 02, 2025 pm 12:57 PM

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Apr 02, 2025 pm 04:12 PM

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Apr 02, 2025 pm 04:54 PM

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apr 02, 2025 pm 05:09 PM

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apabila menggunakan Goland untuk Pembangunan Bahasa GO, banyak pemaju akan menghadapi tag struktur tersuai ...

Kenapa perlu lulus petunjuk apabila menggunakan perpustakaan Go dan Viper? Kenapa perlu lulus petunjuk apabila menggunakan perpustakaan Go dan Viper? Apr 02, 2025 pm 04:00 PM

GO Pointer Syntax dan menangani masalah dalam penggunaan perpustakaan Viper semasa pengaturcaraan dalam bahasa Go, adalah penting untuk memahami sintaks dan penggunaan petunjuk, terutama dalam ...

See all articles