Golang 语雀内容系统(3) - 输出HTML文章

实现功能

  • 增加配置文件
  • 读取语雀内容,并且输出到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
}

你可能感兴趣的:(go)