参照手册http://godoc.golangtc.com/pkg/net/http/#FileServer
里面给了Example:
http.Handle("/", http.FileServer(http.Dir("/tmp")))
这个是对目录提供静态映射服务,如果是单个文件
http.HandleFunc("/static/", func(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, r.URL.Path[1:])})
})
完整例子:
import (
"fmt"
"log"
"net/http"
"os"
"path/filepath"
)
var staticMap map[string]string = map[string]string{
"/web/": "../public/web",
"/bower_components/": "../public/bower_components",
}
func InitStaticServer() {
rootDir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
log.Fatal(err)
}
for webPath, sysPath := range staticMap {
sysPath, err = filepath.Abs(fmt.Sprintf("%s/%s/", rootDir, sysPath))
if err != nil {
log.Fatal(err)
}
log.Print("Serving ", webPath, " -> ", sysPath)
http.Handle(webPath, http.StripPrefix(webPath, http.FileServer(http.Dir(sysPath))))
}
}
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", homeHandler)
http.HandleFunc("/static/", func(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, r.URL.Path[1:])
})
panic(http.ListenAndServe(":17901", nil))
}
func homeHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "<html><head></head><body><h1>Welcome Home!</h1><a href=\"/static/img/test.gif\">Show Image!</a></body></html>")
}