用Go语言写一个简单的HTTP服务器,及静态文件服务器
需要先httpserver接然后转到静态服务器
package main
import (
// “fmt”
“io”
“log”
“net/http”
“os”
“regexp”
“time”
)
func main() {
serveMux := http.NewServeMux()
serveMux.HandleFunc(“/”, SayHello)
serveMux.HandleFunc(“/bye”, SayBye)
// serveMux.HandleFunc(“/static”, StaticServer)
server := http.Server{
Addr: ":8080",
Handler: serveMux,
ReadTimeout: 5 * time.Second,
}
err := server.ListenAndServe()
if err != nil {
log.Fatal(err)
} }
func SayHello(w http.ResponseWriter, r *http.Request) {
if ok, _ := regexp.MatchString(“/static/”, r.URL.String()); ok {
StaticServer(w, r)
return
}
io.WriteString(w, “hello world”)
}
func SayBye(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, “Byebye”)
}
func StaticServer(w http.ResponseWriter, r *http.Request) {
wd, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
http.StripPrefix(“/static/”,
http.FileServer(http.Dir(wd))).ServeHTTP(w, r)
}
// http.ListenAndServe(addr string, handler Handler)
// handler http.Handler interface(ServeHTTP)
// handler single 实现了ServeHTTP
// http.ListenAndServe(":8080", single) 所以可以这样
// NewServeMux http.ServeMux 实现了ServeHTTP
// http.ListenAndServe(":8080", mux) 所以可以这样
// http.Server 包含了Handler 即 http.DefaultServeMux
// DefaultServeMux ServeMux 实现了ServeHTTP
// http.ListenAndServe(addr string, handler Handler)
// 底层 Http.Server
// 调用 server.ListenAndServe()
// 所以 最后还是调用
// Http.Server 结构体 下的 ListenAndServe() 方法
// 参数 addr, handler 主要为了赋值
// 主要方法为Handler下的ServeHTTP方法
// 负责总控