共计 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
}
正文完