基于Go語言開發(fā)一個Markdown轉HTML工具
這個小工具可以把 .md 文件轉換為 .html 文件,非常適合寫筆記、博客或者快速預覽 Markdown 內容。
案例目標
- 讀取一個 Markdown 文件
- 使用開源庫將 Markdown 轉換為 HTML
- 將 HTML 輸出到新文件中
所需庫
我們用 goldmark 這個 Markdown 解析庫,它輕量且高效。
安裝:
go get github.com/yuin/goldmark
實現代碼
package main
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"github.com/yuin/goldmark"
)
func main() {
if len(os.Args) < 2 {
fmt.Println("用法: go run main.go <markdown文件>")
return
}
mdFile := os.Args[1]
// 讀取Markdown文件
content, err := ioutil.ReadFile(mdFile)
if err != nil {
fmt.Printf("讀取文件失敗: %v\n", err)
return
}
// 轉換為HTML
var htmlOutput []byte
md := goldmark.New()
var buf []byte
htmlBuf := &buf
err = md.Convert(content, htmlBuf)
if err != nil {
fmt.Printf("Markdown 轉換失敗: %v\n", err)
return
}
htmlOutput = *htmlBuf
// 生成HTML文件名
htmlFile := filepath.Base(mdFile[:len(mdFile)-len(filepath.Ext(mdFile))]) + ".html"
// 寫入HTML文件
err = ioutil.WriteFile(htmlFile, htmlOutput, 0644)
if err != nil {
fmt.Printf("寫入HTML文件失敗: %v\n", err)
return
}
fmt.Printf("轉換成功!輸出文件: %s\n", htmlFile)
}
使用方法
保存代碼為 main.go
準備一個 test.md 文件,例如:
# Hello Markdown
這是一個 **Markdown 轉 HTML** 的測試。
- 項目一
- 項目二
運行:
go run main.go test.md
會生成 test.html,在瀏覽器里打開就能看到格式化的內容
方法補充
golang 自定義解析 markdown為 html
輸出 HTML 模板內容如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Custom Markdown</title>
<link rel="stylesheet" href="markdown.css" rel="external nofollow" />
</head>
<body>
{{ . }}
</body>
</html>
golang 程序如下
安裝依賴 go get -u github.com/gomarkdown/markdown
package main
import (
"bufio"
"github.com/gomarkdown/markdown"
"github.com/gomarkdown/markdown/ast"
"github.com/gomarkdown/markdown/html"
"html/template"
"io"
"log"
"os"
)
// return (ast.GoToNext, true) to tell html renderer to skip rendering this node
// (because you've rendered it)
func renderHookCodeBlock(w io.Writer, node ast.Node, entering bool) (ast.WalkStatus, bool) {
// skip all nodes that are not CodeBlock nodes
if _, ok := node.(*ast.CodeBlock); !ok {
return ast.GoToNext, false
}
// custom rendering logic for ast.CodeBlock. By doing nothing it won't be
// 寫入自定義數據
w.Write([]byte(`<span>Hello World</span>`))
return ast.GoToNext, false
}
func main() {
inputFile := "markdown.md" // 輸入 md 文件
inputTemplateFile := "template.html" // 模板文件
outputFile := "markdown.html" // 輸出 html 文件
opts := html.RendererOptions{
Flags: html.CommonFlags,
RenderNodeHook: renderHookCodeBlock, // 設置自定義處理鉤子
}
renderer := html.NewRenderer(opts)
// 打開 md 文件
fs, err := os.Open(inputFile)
if err != nil {
return
}
// 讀取 md 內容
var md string
scanner := bufio.NewScanner(fs)
for scanner.Scan() {
md += scanner.Text() + "\n"
}
if scanner.Err() != nil {
log.Panicln(err)
}
// md to html
html := markdown.ToHTML([]byte(md), nil, renderer)
tp, err := template.ParseFiles(inputTemplateFile)
if err != nil {
return
}
// 寫入輸出文件
f, err := os.Create(outputFile)
if err != nil {
return
}
tp.Execute(f, template.HTML(html))
print(string(html))
}
到此這篇關于基于Go語言開發(fā)一個Markdown轉HTML工具的文章就介紹到這了,更多相關Go Markdown轉HTML內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
通過Golang實現linux命令ls命令(命令行工具構建)
這篇文章主要為大家詳細介紹了如何通過Golang實現一個linux命令ls命令(命令行工具構建),文中的示例代碼講解詳細,具有一定的學習價值,感興趣的可以了解一下2023-01-01

