initial commit
This commit is contained in:
commit
664e291742
3
go.mod
Normal file
3
go.mod
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module git.gutmet.org/simpleserver.git
|
||||||
|
|
||||||
|
require git.gutmet.org/goutil.git v0.0.0-20181208191316-76ae04a2662a
|
45
server.go
Normal file
45
server.go
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
package simpleserver
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"git.gutmet.org/goutil.git"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"path"
|
||||||
|
)
|
||||||
|
|
||||||
|
func viewHandler(root string, w http.ResponseWriter, r *http.Request) {
|
||||||
|
file := path.Join(root, r.URL.Path[1:])
|
||||||
|
info, err := os.Stat(file)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprint(w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if info.IsDir() {
|
||||||
|
file = path.Join(file, "index.html")
|
||||||
|
}
|
||||||
|
fmt.Println("GET " + file)
|
||||||
|
content, _ := goutil.ReadFile(file)
|
||||||
|
fmt.Fprint(w, content)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Serve(root string) {
|
||||||
|
address := "0.0.0.0:8000"
|
||||||
|
fmt.Println("Serving at http://" + address + " ...")
|
||||||
|
fmt.Println("Use Ctrl+C to exit")
|
||||||
|
fmt.Println("(This is not a production web server, don't get any funny ideas)")
|
||||||
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { viewHandler(root, w, r) })
|
||||||
|
srv := &http.Server{Addr: address}
|
||||||
|
c := make(chan os.Signal, 1)
|
||||||
|
signal.Notify(c, os.Interrupt)
|
||||||
|
go func() {
|
||||||
|
<-c
|
||||||
|
fmt.Println("Received interrupt, closing...")
|
||||||
|
srv.Close()
|
||||||
|
}()
|
||||||
|
err := srv.ListenAndServe()
|
||||||
|
if err != nil && err != http.ErrServerClosed {
|
||||||
|
fmt.Fprintln(os.Stderr, err)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user