package main import ( "embed" "io" "io/fs" "net/http" "os" "path/filepath" "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 }) }