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. // util.KillProcessByName("fs-go.exe") // 执行会把自己给kill掉
  31. go util.OpenBrowser("http://localhost:" + strconv.Itoa(port)) // Open browser in a goroutine
  32. err := http.ListenAndServe(":"+fmt.Sprintf("%d", port), http.HandlerFunc(handler))
  33. if err != nil {
  34. log.Fatal("server error on port %v: %v", port, err)
  35. }
  36. log.Printf("Server started on port %d\n", port)
  37. }
  38. func banner() {
  39. fmt.Println(`
  40. _______ _______ _______ _______
  41. ( ____ \( ____ \ ( ____ \( ___ )
  42. | ( \/| ( \/ | ( \/| ( ) |
  43. | (__ | (_____ _____ | | | | | |
  44. | __) (_____ )(_____)| | ____ | | | |
  45. | ( ) | | | \_ )| | | |
  46. | ) /\____) | | (___) || (___) |
  47. |/ \_______) (_______)(_______)
  48. author: liuyuqi.gov@msn.cn
  49. `)
  50. }
  51. // remove header cache
  52. func handler(w http.ResponseWriter, r *http.Request) {
  53. w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") // HTTP 1.1.
  54. w.Header().Set("Pragma", "no-cache") // HTTP 1.0.
  55. w.Header().Set("Expires", "0") // Proxies.
  56. if r.URL.Path == "/favicon.ico" {
  57. return
  58. }
  59. http.StripPrefix("/", http.FileServer(http.Dir(dir))).ServeHTTP(w, r)
  60. }