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