


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:
- Import _ "Embed": Import pakej embed. Walaupun fungsi di dalamnya tidak digunakan secara langsung, anda mesti mengimport untuk membolehkan // Go: embed arahan.
- // Go: Embed Static/Index.html: Benamkan kandungan fail statik/index.html ke dalam pemboleh ubah rentetan indexHtml.
- /
- // Go: embed statik/imej/*: Benamkan semua fail dalam direktori statik/imej ke dalam pembolehubah imej, jenis embed.fs, dan sediakan antara muka sistem fail.
- 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:
- // Go: Template Templat/*: Benamkan semua fail .html dalam direktori templat ke dalam pembolehubah templat.
- 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:
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 [].
-
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 }
-
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!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT
Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

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.

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

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.

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.

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

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.

Anggap yang mengasyik,

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.
