Files
tplate/main.go
Hubert Chen 671209ae91
All checks were successful
Build tplate / Build (push) Successful in 38s
rename module tplate to trle5.xyz/gopkg/tplate
2025-12-03 21:57:44 +08:00

90 lines
1.6 KiB
Go

package main
import (
"embed"
"io"
"io/fs"
"net/http"
"os"
"path/filepath"
"trle5.xyz/gopkg/tplate/src/page"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
// embedWebFS 打包了 web 目录下的全部文件
//go:embed web
var embedWebFS embed.FS
func main() {
// 修改 zerolog 的默认 logger
log.Logger = zerolog.New(zerolog.ConsoleWriter{
Out: os.Stdout,
TimeFormat: "15:04:05",
// TimeFormat: "2006/01/02 15:04:05",
}).With().Timestamp().Logger()
if len(os.Args) > 1 && os.Args[1] == "extract" {
err := extractFS()
if err != nil {
log.Fatal().Err(err).Msg("extractFS failed")
}
return
}
var buildMode bool
if len(os.Args) > 1 && os.Args[1] == "build" {
buildMode = true
}
p := page.New(&page.NewPageParams{
BuildMode: buildMode,
EmbedFS: embedWebFS,
})
if buildMode {
p.BuildHandler(len(os.Args) > 2 && os.Args[2] == "--keep")
} else {
http.HandleFunc("/", p.ServerHandler)
log.Info().
Str("URL", "http://localhost:8080").
Msg("Debug server started")
err := http.ListenAndServe(":8080", nil)
log.Fatal().Err(err).Msg("Debug server stopped")
}
}
func extractFS() error {
return fs.WalkDir(embedWebFS, ".", func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if !d.IsDir() {
err = os.MkdirAll(filepath.Dir(path), 0755)
if err != nil {
return err
}
file, err := embedWebFS.Open(path)
if err != nil {
return err
}
defer file.Close()
out, err := os.Create(path)
if err != nil {
return err
}
defer out.Close()
_, err = io.Copy(out, file)
if err != nil {
return err
}
}
return nil
})
}