Penjana tapak statik ialah alatan berkuasa yang memudahkan penciptaan tapak web yang ringan, pantas dan berskala. Sama ada anda membina blog, dokumentasi atau tapak perniagaan kecil, mereka mengubah kandungan yang ditulis dalam Markdown menjadi fail HTML statik yang cekap.
Dalam panduan ini, kami akan mencipta Penjana Tapak Statik (SSG) dalam Go, bahasa pengaturcaraan yang terkenal dengan prestasi, kesederhanaan dan keselarasannya. Kami akan membina alat CLI yang mengambil fail Markdown sebagai input, memprosesnya menggunakan templat HTML yang dipratentukan dan menghasilkan halaman HTML statik yang cantik.
Mengapa Membina Ini?
Penjana tapak statik boleh digunakan untuk beberapa tujuan praktikal:
- Tapak Dokumentasi: Jana tapak pemuatan pantas untuk dokumentasi teknikal.
- Blog: Tulis kandungan anda dalam Markdown dan gunakannya dengan mudah.
- Prototaip: Putar tapak statik dengan pantas untuk projek kecil atau pameran.
Mengapa menggunakan Go untuk projek ini?
- Kelajuan: Pergi kompilasi ke kod mesin asli, menjadikan alat seperti ini sangat pantas.
- Concurrency: Go memudahkan untuk memproses berbilang fail serentak.
- Kesederhanaan: Sintaks Go adalah minimum dan membina alatan CLI adalah mudah.
Saya seronok membina projek ini :)
Persediaan Projek
Sebelum menyelami kod, mari kita gariskan struktur projek:
static-site-generator/ ├── cmd/ │ └── ssg/ │ └── main.go # Entry point ├── internal/ │ ├── generator/ │ │ └── html.go # HTML generation logic │ ├── parser/ │ │ ├── frontmatter.go # YAML frontmatter parsing │ │ └── markdown.go # Markdown processing │ └── watcher/ │ └── watcher.go # File change detection ├── templates/ │ └── default.html # HTML template ├── content/ # Markdown files └── output/
Jika anda ingin membina dari awal, jalankan arahan ini untuk memulakan modul Go untuk projek
go mod init
Ciri Utama:
Tukar Markdown kepada HTML ?
YAML frontmatter untuk penghuraian metadata
Templat HTML untuk output boleh disesuaikan
Pengesanan perubahan fail masa nyata dengan pemerhati ?
Membina Projek
1. Klon Repositori
Sebelum memulakan, klon repositori ke mesin tempatan anda:
git clone https://github.com/Tabintel/static-site-generator.git cd static-site-generator
Tabintel
/
penjana tapak statik
Penjana Tapak Statik
Penjana tapak statik yang pantas dan ringkas ditulis dalam Go.
Ini akan memberi anda semua fail permulaan dan struktur projek yang diperlukan untuk membina dan menjalankan SSG.
2. Penghurai Markdown
Penghurai Markdown mengendalikan penukaran fail .md kepada kandungan HTML. Ia juga mendayakan ciri lanjutan seperti ID pengepala automatik.
dalaman/penghuraikan/markdown.go
static-site-generator/ ├── cmd/ │ └── ssg/ │ └── main.go # Entry point ├── internal/ │ ├── generator/ │ │ └── html.go # HTML generation logic │ ├── parser/ │ │ ├── frontmatter.go # YAML frontmatter parsing │ │ └── markdown.go # Markdown processing │ └── watcher/ │ └── watcher.go # File change detection ├── templates/ │ └── default.html # HTML template ├── content/ # Markdown files └── output/
✨Menukar kandungan Markdown ke dalam format HTML dengan sokongan ciri lanjutan.
3. Penghurai Frontmatter
Penghurai frontmatter mengekstrak metadata seperti tajuk, tarikh, teg dan penerangan daripada fail Markdown.
dalaman/penghuraikan/frontmatter.go
go mod init
? Mengekstrak dan mengembalikan metadata bersama-sama dengan kandungan fail Markdown.
4. Penjana HTML
Penjana HTML menggunakan pakej html/templat Go untuk membuat halaman HTML statik berdasarkan templat.
dalaman/generator/html.go
git clone https://github.com/Tabintel/static-site-generator.git cd static-site-generator
? Menjana fail HTML daripada templat dan menghuraikan kandungan Markdown.
5. Pemerhati Fail
Pemerhati kami memantau kandungan/ direktori untuk perubahan dan mencetuskan pembinaan semula secara automatik.
Ini dibina menggunakan https://github.com/fsnotify/fsnotify
dalaman/pemerhati/pemerhati.go
package parser import ( "github.com/gomarkdown/markdown" "github.com/gomarkdown/markdown/parser" ) type MarkdownContent struct { Content string Title string Date string Tags []string HTMLOutput string } func ParseMarkdown(content []byte) *MarkdownContent { extensions := parser.CommonExtensions | parser.AutoHeadingIDs parser := parser.NewWithExtensions(extensions) html := markdown.ToHTML(content, parser, nil) return &MarkdownContent{ Content: string(content), HTMLOutput: string(html), } }
? Mengesan perubahan fail dan mengautomasikan penjanaan semula fail statik.
6. Aplikasi Utama
Titik masuk menghubungkan semua komponen bersama-sama dan menyediakan pilihan CLI untuk penyesuaian.
cmd/ssg/main.go
package parser import ( "bytes" "gopkg.in/yaml.v2" ) type Frontmatter struct { Title string `yaml:"title"` Date string `yaml:"date"` Tags []string `yaml:"tags"` Description string `yaml:"description"` } func ParseFrontmatter(content []byte) (*Frontmatter, []byte, error) { parts := bytes.Split(content, []byte("---")) if len(parts) <hr> <h2> Penggunaan </h2> <p>Sebelum anda menjalankan apl itu, cipta fail penurunan nilai menggunakan .md dan simpan dalam direktori kandungan</p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173429587675397.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="How to Create a Static Site Generator with Go"></p> <p>Kemudian jalankan penjana:<br> </p> <pre class="brush:php;toolbar:false">package generator import ( "html/template" "os" "path/filepath" ) type Generator struct { TemplateDir string OutputDir string } func NewGenerator(templateDir, outputDir string) *Generator { return &Generator{ TemplateDir: templateDir, OutputDir: outputDir, } } func (g *Generator) Generate(data interface{}, outputFile string) error { if err := os.MkdirAll(g.OutputDir, 0755); err != nil { return err } tmpl, err := template.ParseFiles(filepath.Join(g.TemplateDir, "default.html")) if err != nil { return err } out, err := os.Create(filepath.Join(g.OutputDir, outputFile)) if err != nil { return err } defer out.Close() return tmpl.Execute(out, data) }
Ia menukarkan fail markdown kepada fail HTML dan menyimpannya dalam direktori output
Seperti yang anda lihat, ia menambahkan pemformatan untuk menjadikannya menarik secara visual :)
Perhatikan Perubahan
Dayakan pemerhati:
package watcher import ( "fmt" "github.com/fsnotify/fsnotify" "log" "os" "path/filepath" ) type ProcessFn func() error func Watch(dir string, process ProcessFn) error { watcher, err := fsnotify.NewWatcher() if err != nil { return err } defer watcher.Close() done := make(chan bool) go func() { for { select { case event, ok := <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173429587820788.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="How to Create a Static Site Generator with Go"></p> <hr> <p>Dan itu sahaja!</p> <p>SSG ini menukar penurunan nilai kepada HTML yang bersih, melihat perubahan dan memastikan kandungan anda teratur. Lepaskan ulasan jika anda membina sesuatu dengannya - Saya ingin melihat apa yang anda buat!</p> <blockquote> <p>Temui ini membantu? Anda boleh membelikan saya kopi untuk menyokong lebih banyak tutorial Go! ☕</p> </blockquote> <p>Selamat pengekodan! ?</p><div> <div> <h2> <img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173429587555316.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="How to Create a Static Site Generator with Go"> Tabintel / penjana tapak statik </h2> <h3> </h3> </div> <div> <div> <div> <h1>Penjana Tapak Statik </h1> </div> <p dir="auto">Penjana tapak statik yang pantas dan ringkas ditulis dalam Go.</p> </div> <br> <br> </div> <br> <div>Lihat di GitHub</div> <br> </div> <br>
Atas ialah kandungan terperinci Cara Membuat Penjana Tapak Statik dengan Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Menguasai pakej Strings dalam bahasa Go dapat meningkatkan keupayaan pemprosesan teks dan kecekapan pembangunan. 1) Gunakan fungsi mengandungi untuk memeriksa substrings, 2) Gunakan fungsi indeks untuk mencari kedudukan substring, 3) Sertai fungsi rentetan rentetan splice dengan cekap, 4) Gantikan fungsi untuk menggantikan substrings. Berhati -hati untuk mengelakkan kesilapan biasa, seperti tidak memeriksa rentetan kosong dan isu prestasi operasi rentetan yang besar.

Anda harus mengambil berat tentang pakej Strings di GO kerana ia dapat memudahkan manipulasi rentetan dan membuat kod lebih jelas dan lebih efisien. 1) Gunakan rentetan.join untuk rentetan splice yang cekap; 2) Gunakan rentetan.fields untuk membahagikan rentetan oleh aksara kosong; 3) Cari kedudukan substring melalui strings.index dan strings.lastindex; 4) Gunakan string.replaceall untuk menggantikan rentetan; 5) Gunakan string.builder untuk rentetan splice yang cekap; 6) Sentiasa sahkan input untuk mengelakkan hasil yang tidak dijangka.

ThestringspackageingoisessentialforefficientstringManipulation.1) itofferssimpleyetpowerfunchunctionsfortaskslikecheckingsubstringsandjoiningstrings.2) ithandlesunicodewell, withfalliktionslikestrings

Whendecidingbetweengo'sbytespackageandstringspackage, usebytes.bufferforbinarydataandstrings.builderforstringoperations.1) usebytes.bufferforworkingWithByteslices, BinaryData, AppendingDifferentDatypes, danWritingTo.

Pakej Strings Go menyediakan pelbagai fungsi manipulasi rentetan. 1) Gunakan strings.Contains untuk memeriksa substrings. 2) Gunakan string.split untuk memecah rentetan ke dalam kepingan substring. 3) menggabungkan rentetan melalui string.join. 4) Gunakan rentetan.trimspace atau string.Trim untuk mengeluarkan kosong atau aksara yang ditentukan pada awal dan akhir rentetan. 5) Gantikan semua substring yang ditentukan dengan string.replaceall. 6) Gunakan string.hasprefix atau strings.hassuffix untuk memeriksa awalan atau akhiran rentetan.

Menggunakan pakej GO Language boleh meningkatkan kualiti kod. 1) Gunakan string.join () untuk menyambungkan array rentetan dengan elegan untuk mengelakkan overhead prestasi. 2) menggabungkan rentetan.split () dan strings.contains () untuk memproses teks dan perhatikan masalah kepekaan kes. 3) Elakkan penyalahgunaan strings.replace () dan pertimbangkan untuk menggunakan ungkapan biasa untuk sebilangan besar penggantian. 4) Gunakan string.builder untuk meningkatkan prestasi rentetan splicing yang kerap.

Pakej Bytes Go menyediakan pelbagai fungsi praktikal untuk mengendalikan pengirik byte. 1.Bytes.Contains digunakan untuk memeriksa sama ada slice byte mengandungi urutan tertentu. 2.Bytes.split digunakan untuk memecah irisan byte ke dalam pecahan. 3.Bytes.join digunakan untuk menggabungkan pelbagai hirisan byte ke dalam satu. 4.Bytes.Trimspace digunakan untuk mengeluarkan kekosongan depan dan belakang irisan byte. 5.Bytes.Equal digunakan untuk membandingkan sama ada dua keping byte adalah sama. 6.Bytes.Index digunakan untuk mencari indeks permulaan sub-lisan dalam largerlices.

Theencoding/binarypackageingoisessentialbecauseitprovideSastandardardwaywaytoreadandwriteBinaryData, memastikanCross-platformcompatibilityandhandlingdifferentendianness.itoffersFunctionsLikeread, tulis, readuupisyary


Alat AI Hot

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

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

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.
