This is an explanation of the video content.
 用技术延续对ACG的热爱
32

 |   | 

Go读取指定目录下的markdown文件,并转化为html渲染到前端

在Go语言中,读取指定目录下的Markdown文件并将其转换为HTML,可以通过以下步骤实现:

  1. 读取目录:使用os包来列出指定目录下的所有文件。
  2. 筛选Markdown文件:检查文件扩展名是否为.md.markdown
  3. 读取并转换Markdown:使用第三方库(如github.com/russross/blackfriday/v2)将Markdown内容转换为HTML。
  4. 渲染到前端:将转换得到的HTML发送到前端进行渲染。

以下是一个简单的示例代码,演示了这个过程:

package main

import (
    "bytes"
    "html/template"
    "io/ioutil"
    "os"
    "path/filepath"
    "strings"

    "github.com/russross/blackfriday/v2"
)

// 将Markdown转换为HTML
func MarkdownToHTML(markdown string) template.HTML {
    // 使用blackfriday进行Markdown渲染,可以添加需要的选项
    return template.HTML(string(blackfriday.Run([]byte(markdown))))
}

// 读取目录下的所有Markdown文件并转换为HTML
func ReadMarkdownFiles(dirPth string) (map[string]string, error) {
    htmlFiles := make(map[string]string)
    err := filepath.Walk(dirPth, func(path string, info os.FileInfo, err error) error {
        if err != nil {
            return err
        }
        if !info.IsDir() && (strings.HasSuffix(info.Name(), ".md") || strings.HasSuffix(info.Name(), ".markdown")) {
            markdownContent, err := ioutil.ReadFile(path)
            if err != nil {
                return err
            }
            htmlContent := MarkdownToHTML(string(markdownContent))
            htmlFiles[filepath.Base(path)] = string(htmlContent)
        }
        return nil
    })
    return htmlFiles, err
}

func main() {
    dirPath := "./markdowns" // 指定的目录路径
    htmlFiles, err := ReadMarkdownFiles(dirPath)
    if err != nil {
        // 适当的错误处理
        panic(err)
    }

    // 渲染到前端的逻辑...
    // 此处省略,根据你的应用逻辑进行处理
}

这个示例程序做了以下几件事:

  • 定义了一个MarkdownToHTML函数,使用blackfriday库将Markdown文本转换为HTML。
  • 定义了一个ReadMarkdownFiles函数,遍历指定目录下的所有文件,筛选出Markdown文件,并使用MarkdownToHTML函数转换为HTML,最后返回一个包含文件名和HTML内容的映射。
  • main函数中,调用ReadMarkdownFiles读取Markdown文件并转换,然后使用text/template包将结果渲染到一个HTML模板中。

请注意,这只是一个简单的示例,实际应用中你可能需要添加更多的错误处理和功能,比如Web服务器集成、文件监控、用户界面等。此外,确保你已经安装了blackfriday库,可以通过运行go get github.com/russross/blackfriday/v2来安装。

32 服务端 ↦ Go开发技巧 __ 137 字
 Go开发技巧 #40