Jadual Kandungan
Kaedah untuk membungkus sumber statik ke dalam program Go
Menggunakan pakej embed (GO 1.16)
Contoh
Gunakan embed.fs untuk memproses templat
Perkara yang perlu diperhatikan
Pergi versi sebelum 1.16
Menanamkan fail teks
Benamkan fail binari
Meringkaskan
Rumah pembangunan bahagian belakang Golang Kaedah untuk membungkus sumber statik ke dalam program Go

Kaedah untuk membungkus sumber statik ke dalam program Go

Oct 03, 2025 am 09:21 AM

Kaedah untuk membungkus sumber statik ke dalam program Go

Kaedah untuk membungkus sumber statik ke dalam program Go

Artikel ini memperkenalkan beberapa kaedah untuk membenamkan sumber statik (seperti HTML, CSS, JavaScript, Gambar, dan lain-lain) dalam program GO, dan memberi tumpuan kepada penggunaan pakej yang disediakan oleh GO 1.16 dan ke atas, serta bagaimana untuk membenamkan sumber melalui rentetan, irisan byte, dan lain-lain.

Apabila membangunkan aplikasi web Go, sumber statik (HTML, CSS, JavaScript, gambar, dan lain -lain) dibungkus dengan fail yang boleh dilaksanakan, yang boleh memudahkan penggunaan pengguna dan pengedaran. Go menyediakan pelbagai cara untuk mencapai matlamat ini, dan artikel ini akan merangkumi kaedah ini secara terperinci.

Menggunakan pakej embed (GO 1.16)

GO 1.16 memperkenalkan pakej embed, yang sangat memudahkan proses penyembuhan sumber statik. Melalui // GO: Direktifkan arahan, fail atau direktori boleh dibenamkan terus ke dalam program GO.

Contoh

 import (
    _ "enmbed"
    "FMT"
    "Net/http"
    "HTML/Template"
)

// Go: Embed static/index.html
var indexhtml rentetan

// Go: Embed static/style.css
var stylecss [] byte

// Go: Embed Static/Images/*
var imej embedded.fs

func main () {
    http.handlefunc ("/", func (w http.responseWriter, r *http.request) {
        fmt.fprint (w, indexhtml)
    })

    http.handlefunc ("/style.css", func (w http.responseWriter, r *http.request) {
        W.Header (). Set ("Kandungan-Jenis", "Teks/CSS")
        w.write (stylecss)
    })

    // Gunakan http.fs untuk menyediakan perkhidmatan imej fs: = http.fileserver (http.fs (imej))
    http.handle ("/imej/", http.stripprefix ("/images/", fs))

    fmt.println ("Server Mendengarkan: 8080")
    http.listenandserve (": 8080", nil)
}

Penjelasan kod:

  1. Import _ "Embed": Import pakej embed. Walaupun fungsi di dalamnya tidak digunakan secara langsung, anda mesti mengimport untuk membolehkan // Go: embed arahan.
  2. // Go: Embed Static/Index.html: Benamkan kandungan fail statik/index.html ke dalam pemboleh ubah rentetan indexHtml.
  3. /
  4. // Go: embed statik/imej/*: Benamkan semua fail dalam direktori statik/imej ke dalam pembolehubah imej, jenis embed.fs, dan sediakan antara muka sistem fail.
  5. http.fs (imej): Tukar embed.fs ke http.filesystem, digunakan untuk menyediakan perkhidmatan fail statik ke http.fileserver.

Gunakan embed.fs untuk memproses templat

embed.fs juga memudahkan pemprosesan fail templat.

 import (
    _ "enmbed"
    "FMT"
    "Net/http"
    "HTML/Template"
)

// Pergi: Templat embed/*
Templat var Embedded.fs

var tpl *template.template

func init () {
    VAR ERR ERROR
    tpl, err = template.parsefs (templat, "templat/*. html")
    jika err! = nil {
        panik (err)
    }
}

func main () {
    http.handlefunc ("/", func (w http.responseWriter, r *http.request) {
        data: = peta [string] string {
            "Tajuk": "Templat Terbenam",
            "Mesej": "Halo dari templat tertanam!",
        }
        Err: = tpl.ExecuteTemplate (W, "Templates/index.html", data)
        jika err! = nil {
            http.error (w, err.error (), http.statusinternalservererror)
            Kembali
        }
    })

    fmt.println ("Server Mendengarkan: 8080")
    http.listenandserve (": 8080", nil)
}

Penjelasan kod:

  1. // Go: Template Templat/*: Benamkan semua fail .html dalam direktori templat ke dalam pembolehubah templat.
  2. template.parsefs (templat, "templat/*. html"): gunakan template.parsefs untuk menghuraikan fail template tertanam.

Perkara yang perlu diperhatikan

  • /
  • Pelbagai fail atau direktori boleh dipadankan dengan menggunakan watak Wildcard*.
  • Pakej embed hanya boleh membenamkan fail, bukan direktori sendiri.

Pergi versi sebelum 1.16

Sebelum GO 1.16, kaedah lain diperlukan untuk membenamkan sumber statik.

Menanamkan fail teks

Untuk fail teks (seperti HTML, CSS, JavaScript), kandungannya boleh disematkan secara langsung ke dalam kod GO sebagai rentetan.

 const html = `


    <h1> Hello, dunia! </h1>


`

Pengendali Func (w http.ResponseWriter, r *http.request) {
    W.Header (). Set ("jenis kandungan", "teks/html")
    w.write ([] byte (html))
}

Petua Pengoptimuman:

Rentetan boleh ditukar kepada jenis [] byte untuk mengelakkan penukaran setiap kali anda menulis.

 var htmlbytes = [] byte (`


    <h1> Hello, dunia! </h1>


`)

Pengendali Func (w http.ResponseWriter, r *http.request) {
    W.Header (). Set ("jenis kandungan", "teks/html")
    W.Write (htmlbytes)
}

Benamkan fail binari

Untuk fail binari (seperti gambar), terdapat beberapa kaedah:

  1. Simpan sebagai slice byte [] byte: Ini adalah cara yang paling padat dan cekap. Anda boleh menggunakan alat pihak ketiga seperti Go-Bindata untuk menukar fail binari ke dalam kod GO untuk menghasilkan pemboleh ubah byte [].

  2. Disimpan sebagai String Base64: Menukar fail binari ke rentetan Base64 yang dikodkan dan kemudian menyimpannya dalam kod GO. Apabila program bermula, ekodkan rentetan.

     import (
        "Pengekodan/BASE64"
        "FMT"
        "io/ioutil"
    )
    
    func main () {
        data, err: = ioutil.readFile ("image.png")
        jika err! = nil {
            panik (err)
        }
        base64string: = base64.stDencoding.encodeToString (data)
        fmt.println (base64string)
    
        // ... (menyimpan base64string ke dalam kod)
    
        decodedData, err: = base64.stdencoding.decodeString (base64string)
        jika err! = nil {
            panik (err)
        }
        // decodedData adalah jenis [] byte
        _ = decodedData
    }
  3. Disimpan sebagai rentetan yang disebutkan: Gunakan fungsi strConv.quote () untuk menukar data binari ke dalam rentetan yang disebutkan dan simpannya dalam kod GO. Pengkompil akan secara automatik tidak mengutip rentetan pada masa penyusunan.

     import (
        "FMT"
        "io/ioutil"
        "STRCONV"
    )
    
    func main () {
        data, err: = ioutil.readFile ("image.png")
        jika err! = nil {
            panik (err)
        }
        QuotedString: = strconv.quote (string (data))
        FMT.println (QuotedString)
    
        // ... (menyimpan petikan ke kod)
    
        // Gunakan QuotedString
        var imgdata = [] byte (QuotedString)
        _ = imgdata
    }

Meringkaskan

  • Untuk GO 1.16 dan ke atas, pakej embed disyorkan, yang menyediakan cara yang paling mudah dan efisien untuk membenamkan sumber statik.
  • Untuk versi terdahulu, kaedah yang sesuai boleh dipilih berdasarkan jenis fail: Fail teks boleh dibenamkan secara langsung sebagai rentetan, dan fail binari boleh ditukar menjadi irisan byte, rentetan base64, atau rentetan yang disebutkan.
  • Kaedah yang mana untuk dipilih bergantung kepada keperluan projek dan keutamaan peribadi. Jika anda memerlukan saiz minimum dan prestasi optimum, disarankan untuk menggunakan go-bindata atau secara manual menjana irisan byte. Jika anda memberi perhatian lebih kepada pembacaan kod dan kemudahan penggunaan, anda boleh menggunakan rentetan Base64 atau rentetan yang disebutkan.

Atas ialah kandungan terperinci Kaedah untuk membungkus sumber statik ke dalam program Go. 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

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

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.

Stock Market GPT

Stock Market GPT

Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

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)

Topik panas

Apakah struct struktur kosong {} yang digunakan di Golang Apakah struct struktur kosong {} yang digunakan di Golang Sep 18, 2025 am 05:47 AM

Struct {} adalah struktur tanpa medan di GO, yang menduduki bait sifar dan sering digunakan dalam senario di mana data tidak diperlukan. Ia digunakan sebagai isyarat dalam saluran, seperti penyegerakan goroutine; 2. Digunakan sebagai koleksi jenis nilai peta untuk mencapai pemeriksaan kewujudan utama dalam ingatan yang cekap; 3. Penerima kaedah tanpa stateless yang pasti, sesuai untuk suntikan pergantungan atau fungsi organisasi. Jenis ini digunakan secara meluas untuk mengekspresikan aliran kawalan dan niat yang jelas.

Bagaimana anda membaca dan menulis fail di Golang? Bagaimana anda membaca dan menulis fail di Golang? Sep 21, 2025 am 01:59 AM

Goprovidessimpleandefficientfilehandlingingtheosandbufiopackages.toreadasmallfileentirely, useos.readfile, whittloadsthecontentintomemorysafelyandautomatikManageSoperations.forlargefilesorincrementalprementalprementalprementrementprementalplocessing,

Mulakan editor luaran dalam program Go dan tunggu selesai Mulakan editor luaran dalam program Go dan tunggu selesai Sep 16, 2025 pm 12:21 PM

Artikel ini menerangkan bagaimana untuk memulakan editor luaran (seperti VIM atau Nano) dalam program Go dan tunggu pengguna menutup editor sebelum program terus dilaksanakan. Dengan menetapkan cmd.stdin, cmd.stdout, dan cmd.stderr, editor boleh berinteraksi dengan terminal untuk menyelesaikan masalah kegagalan permulaan. Pada masa yang sama, contoh kod lengkap ditunjukkan dan langkah berjaga -jaga disediakan untuk membantu pemaju melaksanakan fungsi ini dengan lancar.

Selesaikan GO WebSocket EOF ERROR: Pastikan sambungan aktif Selesaikan GO WebSocket EOF ERROR: Pastikan sambungan aktif Sep 16, 2025 pm 12:15 PM

Artikel ini bertujuan untuk menyelesaikan kesilapan EOF (akhir-of-file) yang dihadapi ketika membangunkan WebSocket menggunakan GO. Kesalahan ini biasanya berlaku apabila pelayan menerima mesej klien dan sambungannya ditutup tanpa disangka -sangka, mengakibatkan mesej berikutnya tidak dapat dihantar secara normal. Artikel ini akan menganalisis punca masalah, memberikan contoh kod, dan menyediakan penyelesaian yang sepadan untuk membantu pemaju membina aplikasi WebSocket yang stabil dan boleh dipercayai.

Apakah middleware dalam konteks pelayan web Golang? Apakah middleware dalam konteks pelayan web Golang? Sep 16, 2025 am 02:16 AM

MiddlewareinGowebserversarefunctionsthatinterceptHTTPrequestsbeforetheyreachthehandler,enablingreusablecross-cuttingfunctionality;theyworkbywrappinghandlerstoaddpre-andpost-processinglogicsuchaslogging,authentication,CORS,orerrorrecovery,andcanbechai

Cara Membaca Konfigurasi Dari Fail di Golang Cara Membaca Konfigurasi Dari Fail di Golang Sep 18, 2025 am 05:26 AM

Gunakan pakej pengekodan/json perpustakaan standard untuk membaca fail konfigurasi JSON; 2. Gunakan perpustakaan Gopkg.in/yaml.v3 untuk membaca konfigurasi format YAML; 3. Gunakan Perpustakaan OS.Getenv atau Godotenv untuk menimpa konfigurasi fail; 4. Gunakan perpustakaan Viper untuk menyokong fungsi lanjutan seperti konfigurasi pelbagai format, pembolehubah persekitaran, tambah nilai automatik; Adalah perlu untuk menentukan struktur untuk memastikan keselamatan jenis, mengendalikan kesilapan fail dan parsing dengan betul, menggunakan medan pemetaan tag struktur dengan betul, mengelakkan laluan berkod keras, dan mengesyorkan menggunakan pembolehubah persekitaran atau penyimpanan konfigurasi yang selamat dalam persekitaran pengeluaran. Ia boleh bermula dengan JSON yang mudah dan berhijrah ke Viper apabila keperluannya kompleks.

Bagaimana anda mengendalikan penutupan anggun dalam aplikasi Golang? Bagaimana anda mengendalikan penutupan anggun dalam aplikasi Golang? Sep 21, 2025 am 02:30 AM

Anggap yang mengasyik,

GO LANGUAGE CFB MODE SCRYPTION: Selesaikan pengecualian penunjuk nil XORKEYSTREAM GO LANGUAGE CFB MODE SCRYPTION: Selesaikan pengecualian penunjuk nil XORKEYSTREAM Sep 16, 2025 pm 12:30 PM

Artikel ini bertujuan untuk membantu pemaju memahami dan menyelesaikan pengecualian penunjuk nil yang disebabkan oleh fungsi XORKeystream yang mungkin ditemui semasa menggunakan mod CFB (Cipher Feedback) GO untuk penyulitan AES. Pastikan proses penyulitan berjalan lancar dengan menganalisis punca kesilapan yang sama dan memberikan contoh kod yang betul. Tumpuannya adalah pada penggunaan vektor inisialisasi yang betul (IVS) dan kepentingan memahami saiz blok AES.

See all articles