最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Go語言開發(fā)一個Markdown轉HTML工具

 更新時間:2025年09月10日 08:18:05   作者:程序員愛釣魚  
這篇文章主要為大家詳細介紹了如何基于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中Json的序列化和反序列化的使用

    Golang中Json的序列化和反序列化的使用

    本文主要介紹了Golang中Json的序列化和反序列化的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Go處理JSON數據的實現

    Go處理JSON數據的實現

    本文主要介紹了Go處理JSON數據的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • go語言實現同步操作項目示例

    go語言實現同步操作項目示例

    本文主要介紹了go語言實現同步操作項目示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • Go語言的限流與熔斷機制的多種方法實現

    Go語言的限流與熔斷機制的多種方法實現

    限流和熔斷是保障系統穩(wěn)定性的重要機制,它們可以防止系統因過載而崩潰,提高系統的可用性和可靠性,本文就來詳細的介紹一下Go語言的限流與熔斷機制的多種方法實現,感興趣的可以了解一下
    2026-04-04
  • Go常用技能日志log包創(chuàng)建使用示例

    Go常用技能日志log包創(chuàng)建使用示例

    這篇文章主要為大家介紹了Go常用技能日志log包創(chuàng)建使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • golang?手寫貪吃蛇示例實現

    golang?手寫貪吃蛇示例實現

    這篇文章主要為大家介紹了golang?手寫貪吃蛇示例實現,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • golang的匿名函數和普通函數的區(qū)別解析

    golang的匿名函數和普通函數的區(qū)別解析

    匿名函數是不具名的函數,可以在不定義函數名的情況下直接使用,通常用于函數內部的局部作用域中,這篇文章主要介紹了golang的匿名函數和普通函數的區(qū)別,需要的朋友可以參考下
    2023-03-03
  • 通過Golang實現linux命令ls命令(命令行工具構建)

    通過Golang實現linux命令ls命令(命令行工具構建)

    這篇文章主要為大家詳細介紹了如何通過Golang實現一個linux命令ls命令(命令行工具構建),文中的示例代碼講解詳細,具有一定的學習價值,感興趣的可以了解一下
    2023-01-01
  • Go標準庫sync功能實例詳解

    Go標準庫sync功能實例詳解

    Go語言通過goroutine實現輕量級并發(fā),而sync庫是并發(fā)編程中同步原語的核心集合,提供了多種用于協調goroutine執(zhí)行、保護共享資源的工具,這篇文章給大家介紹Go標準庫sync功能實例詳解,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • golang validator參數校驗的實現

    golang validator參數校驗的實現

    這篇文章主要介紹了golang validator參數校驗的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10

最新評論

简阳市| 堆龙德庆县| 嘉鱼县| 瑞金市| 和静县| 井冈山市| 海兴县| 晴隆县| 濮阳市| 台江县| 岢岚县| 淮南市| 龙里县| 吉木萨尔县| 游戏| 固镇县| 靖西县| 浪卡子县| 东港市| 杨浦区| 林周县| 柳河县| 东城区| 新巴尔虎左旗| 巴彦淖尔市| 竹溪县| 新建县| 石林| 邯郸市| 神木县| 威海市| 蛟河市| 桂林市| 满城县| 清水河县| 峨边| 师宗县| 黎川县| 平安县| 奈曼旗| 阳山县|