shttpd.go 968 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // This source code is dedicated to the Public Domain.
  2. // Package shttpd is a static http server serving files under current directory,
  3. // i.e. `python2 -m SimpleHTTPServer` in Go.
  4. package main
  5. import (
  6. "fmt"
  7. "net/http"
  8. "os"
  9. "strconv"
  10. "log"
  11. )
  12. func main() {
  13. var port uint16
  14. if len(os.Args) == 1 {
  15. port = 8000
  16. } else if len(os.Args) == 2 {
  17. var err error
  18. port, err = parseArgument(os.Args[1])
  19. if err != nil {
  20. usage()
  21. }
  22. } else {
  23. usage()
  24. }
  25. workingDirectory, _ := os.Getwd()
  26. fmt.Printf("Serving HTTP on port %d (http://127.0.0.1:8000/) ...", port)
  27. err := http.ListenAndServe(
  28. ":"+strconv.Itoa(int(port)),
  29. http.FileServer(http.Dir(workingDirectory)))
  30. log.Fatal(err)
  31. }
  32. func parseArgument(port string) (uint16, error) {
  33. ret, err := strconv.ParseInt(port, 10, 16)
  34. return uint16(ret), err
  35. }
  36. func usage() {
  37. fmt.Println("Usage: shttpd [PORT]")
  38. fmt.Println("PORT must be an integer between 0 and 65535")
  39. exUsage := 64
  40. os.Exit(exUsage)
  41. }