main.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "github.com/jianboy/fs-go/util"
  6. "log"
  7. "net/http"
  8. "strconv"
  9. )
  10. var port int
  11. var dir string
  12. func main() {
  13. banner()
  14. // Handle the flags that are provided.
  15. flag.IntVar(&port, "port", 8080, "The port that the server will listen to.")
  16. flag.StringVar(&dir, "dir", ".", "The root directory that will be served.")
  17. // Parse the flags.
  18. flag.Parse()
  19. log.Printf("server is start %v: %v", port, dir)
  20. //check port
  21. // for i := 0; i < 5; i++ {
  22. // if util.checkAvailablePort(port) {
  23. // break
  24. // } else {
  25. // // log.Println(strconv.Itoa(port) + " is not available.")
  26. // log.Printf("server error on port %v: %v", port, err)
  27. // port++
  28. // }
  29. // }
  30. go util.OpenBrowser("http://localhost:" + strconv.Itoa(port)) // Open browser in a goroutine
  31. err := http.ListenAndServe(":"+fmt.Sprintf("%d", port), http.HandlerFunc(handler))
  32. if err != nil {
  33. log.Fatal("server error on port %v: %v", port, err)
  34. }
  35. log.Printf("Server started on port %d\n", port)
  36. }
  37. func banner() {
  38. fmt.Println(`
  39. _______ _______ _______ _______
  40. ( ____ \( ____ \ ( ____ \( ___ )
  41. | ( \/| ( \/ | ( \/| ( ) |
  42. | (__ | (_____ _____ | | | | | |
  43. | __) (_____ )(_____)| | ____ | | | |
  44. | ( ) | | | \_ )| | | |
  45. | ) /\____) | | (___) || (___) |
  46. |/ \_______) (_______)(_______)
  47. author: liuyuqi.gov@msn.cn
  48. `)
  49. }
  50. // remove header cache
  51. func handler(w http.ResponseWriter, r *http.Request) {
  52. w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") // HTTP 1.1.
  53. w.Header().Set("Pragma", "no-cache") // HTTP 1.0.
  54. w.Header().Set("Expires", "0") // Proxies.
  55. if r.URL.Path == "/favicon.ico" {
  56. return
  57. }
  58. http.StripPrefix("/", http.FileServer(http.Dir(dir))).ServeHTTP(w, r)
  59. }