用golang开发http服务的时候,有时会需要一个静态目录来存放css,js和image图片,并且能通过http访问到。在golang可以用http.FileServer来处理。
http.FileServer原型
func FileServer(root FileSystem) Handler
搭建一个静态文件服务
网站文件目录如下,其中红色框设为相应目录:

文件目录
package main import ( "log" "net/http" ) func main() { h := http.FileServer(http.Dir("/Users/chenjiebin/Sites/goexample/net/http/static")) err := http.ListenAndServe(":9090", h) if err != nil { log.Fatal("ListenAndServe: ", err) } }
运行该项目,在浏览器里访问:

golang文件服务器
这个示例把整个http服务作为了文件服务器,在实际中一般会需要结合其它路由使用,这种情况下可以用http.StripPrefix函数来实现。
网站中设置静态目录
package main import ( "fmt" "log" "net/http" ) func index(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello golang http!") } func main() { http.HandleFunc("/", index) // 设置静态目录 fsh := http.FileServer(http.Dir("/Users/chenjiebin/Sites/goexample/net/http/static")) http.Handle("/static/", http.StripPrefix("/static/", fsh)) err := http.ListenAndServe(":9090", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } }
运行浏览器里访问,就可以通过/static/路径访问到相关的静态文件了。

http.StripPrefix设置访问路径
转载请注明:快乐编程 » golang http设置静态目录
```
os.Getwd()
```
显示当前目录是用户目录~即:/Users/username
我在代码中,直接使用相对路径,一直报错,后来查了以后才知道,代码读的路径是/Users/username 就是用户的目录,而不是编译后可执行文件所在的目录
谢谢回复!
关键点应该是在Getwd()函数,Getwd是获取当前的工作目录,如果不设置,是从bash带入进去的。
比如在terminal的 /Users/username/abc 目录下执行,Getwd()获取到的就是 /Users/username/abc
可以通过 os.Chdir 修改工作目录。
不过,我记得在搭建 golang 开发环境的时候,是有设置工作目录的。go env 显示:
```
GOARCH="amd64"
GOBIN="/usr/local/go/bin"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/KJRS/gowork"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GO15VENDOREXPERIMENT="1"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"
```
难道是因为GOEXT="",所以就成了您说的,是从 bash 带入进去的?
是这样的,然后把代码改回https://astaxie.gitbooks.io/build-web-application-with-golang/content/zh/04.1.html中的代码,结果还是报错,不行!
使用 os.Getwd() 就可以