关于go:Golang-语雀内容系统3-输出HTML文章

21次阅读

共计 1795 个字符,预计需要花费 5 分钟才能阅读完成。

实现性能

  • 减少配置文件
  • 读取语雀内容,并且输入到 HTML 上

具体步骤

本节残缺代码
参考:https://github.com/golangtips/yuque/releases/tag/v0.0.3

main.go 减少配置解析,把 services 传入 http 申请处理函数

package main

import (
    "fmt"
    "log"
    "net/http"
    "os"
    "os/signal"
    "syscall"
    "time"

    "github.com/golangtips/yuque/service"

    "github.com/golangtips/yuque/config"

    "github.com/BurntSushi/toml"
    "github.com/golangtips/yuque/handler"

    "github.com/gorilla/mux"
)

func main() {err := run()
    if err != nil {log.Fatal(err)
    }
}

func run() error {

    // 解析配置文件
    var config config.Toml
    if _, err := toml.DecodeFile("config.toml", &config); err != nil {return err}

    // 初始化服务
    s, err := service.NewSet(&config)
    if err != nil {return err}

    r := mux.NewRouter()

    // 文章详情页
    r.Methods("GET").Path("/").HandlerFunc(handler.HomePage)

    // 文章详情页
    r.Methods("GET").Path("/posts/{slug:[a-zA-Z0-9.]+}").HandlerFunc(handler.PostDetail(s.YuQue))

    // 文章详情页
    r.Methods("GET").Path("/posts").HandlerFunc(handler.PostList(s.YuQue))

    // 文章搜寻页
    r.Methods("GET").Path("/search").HandlerFunc(handler.Search(s.YuQue))

    server := &http.Server{
        Handler:      r,
        Addr:         fmt.Sprintf(":%d", config.HTTPPort),
        WriteTimeout: 5 * time.Second,
        ReadTimeout:  5 * time.Second,
    }

    errs := make(chan error)

    // HTTP 服务
    go (func() {log.Println("HTTP 服务启动")
        errs <- server.ListenAndServe()})()

    // 退出信号处理
    go (func() {ch := make(chan os.Signal, 1)
        signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
        errs <- fmt.Errorf("%s", <-ch)
    })()

    // 退出日志
    log.Println("exit", <-errs)

    return nil
}

handler/post.go 减少 service.IYuQue 传参

package handler

import (
    "log"
    "net/http"
    "strconv"
    "time"

    service "github.com/golangtips/yuque/service/intf"
    "github.com/gorilla/mux"

    "html/template"
)


// PostDetail 文章详情页
func PostDetail(s service.IYuQue) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {// ... 这里省略....}
}

// PostList 文章列表页
func PostList(s service.IYuQue) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {// ... 这里省略....}
}


type Post struct {
    Title     string
    Content   template.HTML
    Slug      string
    CreatedAt time.Time
}

正文完
 0