靜態網站產生器是一種強大的工具,可以簡化輕量級、快速且可擴展的網站的創建。無論您是建立部落格、文件還是小型企業網站,它們都會將用 Markdown 編寫的內容轉換為高效的靜態 HTML 文件。
在本指南中,我們將使用Go 建立一個靜態網站產生器(SSG),Go 是一種以其效能、簡單性和並發性而聞名的程式設計語言.我們將建立一個 CLI 工具,它將 Markdown 文件作為輸入,使用預先定義的 HTML 模板對其進行處理,並輸出漂亮的靜態 HTML 頁面。
為什麼要建構這個?
靜態站點產生器可以滿足多種實際用途:
- 文件網站:產生技術文件的快速載入網站。
- 部落格:用 Markdown 寫內容並輕鬆部署。
- 原型製作:快速啟動小型專案或展示的靜態網站。
為什麼在這個專案中使用 Go?
- 速度:Go 編譯為本機機器碼,使得這類工具速度極快。
- 併發:Go 可以輕鬆同時處理多個檔案。
- 簡單:Go 的語法很簡單,建構 CLI 工具也很簡單。
建造這個專案我玩得很開心:)
項目設定
在深入程式碼之前,我們先概述一下專案的結構:
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/
如果您想從頭開始構建,請執行此命令來初始化專案的 Go 模組
go mod init
主要特點:
將 Markdown 轉換為 HTML ?
用於元資料解析的 YAML frontmatter
用於可自訂輸出的 HTML 範本
使用觀察者即時檔案更改偵測?
建設項目
1. 克隆儲存庫
開始之前,將儲存庫複製到本機:
git clone https://github.com/Tabintel/static-site-generator.git cd static-site-generator
塔賓特爾
/
靜態站點產生器
靜態站點產生器
用 Go 寫的快速、簡單的靜態網站產生器。
這將為您提供建置和運行 SSG 所需的所有入門檔案和專案結構。
2.Markdown解析器
Markdown 解析器處理將 .md 檔案轉換為 HTML 內容。它還支援自動標題 ID 等擴充功能。
內部/解析器/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/
✨將 Markdown 內容轉換為 HTML 格式,並提供擴充功能支援。
3. Frontmatter 解析器
frontmatter 解析器從 Markdown 文件中提取標題、日期、標籤和描述等元資料。
內部/解析器/frontmatter.go
go mod init
?提取並返回元資料以及 Markdown 文件的內容。
4. HTML 產生器
HTML 產生器使用 Go 的 html/template 套件基於模板建立靜態 HTML 頁面。
內部/generator/html.go
git clone https://github.com/Tabintel/static-site-generator.git cd static-site-generator
?從模板和解析的 Markdown 內容產生 HTML 檔案。
5. 文件觀察器
我們的觀察者監視內容/目錄的變更並自動觸發重建。
這是使用 https://github.com/fsnotify/fsnotify
建構的內部/watcher/watcher.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), } }
?偵測文件變更並自動重新產生靜態文件。
六、主要用途
入口點將所有元件連結在一起,並提供自訂的 CLI 選項。
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> 用法 </h2> <p>在執行應用程式之前,使用 .md 建立一個 markdown 檔案並將其保存在內容目錄中</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>然後運行生成器:<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) }
它將 markdown 檔案轉換為 HTML 檔案並將其保存在輸出目錄中
如您所見,它添加了格式以使其具有視覺吸引力:)
留意變化
啟用觀察者:
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>就是這樣! </p> <p>此 SSG 將 markdown 轉換為乾淨的 HTML,監視變更並保持您的內容井井有條。如果您用它建立了一些東西,請發表評論 - 我很想看看您創建的內容! </p> <blockquote> <p>覺得這有幫助嗎?你可以請我喝杯咖啡來支持更多Go教學! ☕</p> </blockquote> <p>編碼愉快! ? </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"> 塔賓特爾 / 靜態站點產生器 </h2> <h3> </h3> </div> <div> <div> <div> <h1>靜態站點產生器 </h1> </div> <p dir="auto">用 Go 寫的快速、簡單的靜態網站產生器。 </p> </div> <br> <br> </div> <br> <div>在 GitHub 上查看</div> <br> </div> <br>
以上是如何使用 Go 建立靜態網站產生器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文演示了創建模擬和存根進行單元測試。 它強調使用接口,提供模擬實現的示例,並討論最佳實踐,例如保持模擬集中並使用斷言庫。 文章

本文探討了GO的仿製藥自定義類型約束。 它詳細介紹了界面如何定義通用功能的最低類型要求,從而改善了類型的安全性和代碼可重複使用性。 本文還討論了局限性和最佳實踐

本文討論了GO的反思軟件包,用於運行時操作代碼,對序列化,通用編程等有益。它警告性能成本,例如較慢的執行和更高的內存使用,建議明智的使用和最佳

本文討論了GO中使用表驅動的測試,該方法使用測試用例表來測試具有多個輸入和結果的功能。它突出了諸如提高的可讀性,降低重複,可伸縮性,一致性和A

OpenSSL,作為廣泛應用於安全通信的開源庫,提供了加密算法、密鑰和證書管理等功能。然而,其歷史版本中存在一些已知安全漏洞,其中一些危害極大。本文將重點介紹Debian系統中OpenSSL的常見漏洞及應對措施。 DebianOpenSSL已知漏洞:OpenSSL曾出現過多個嚴重漏洞,例如:心臟出血漏洞(CVE-2014-0160):該漏洞影響OpenSSL1.0.1至1.0.1f以及1.0.2至1.0.2beta版本。攻擊者可利用此漏洞未經授權讀取服務器上的敏感信息,包括加密密鑰等。

本文使用跟踪工具探討了GO應用程序執行流。 它討論了手冊和自動儀器技術,比較諸如Jaeger,Zipkin和Opentelemetry之類的工具,並突出顯示有效的數據可視化


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版
SublimeText3 Linux最新版

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具