为了让golang的路由更加清晰,让路由的代码可读性更好,我们采用mux包去实现路由,并且在原有功能上做了精简
开始github.com/gorilla/mux
我们在启动http服务时设置一下路由的配置方法
func startHttp() { if err := http.ListenAndServe(":9090",api.NewAPIMux()); err != nil { log.Fatal("ListenAndServe: ",err) } }配置
api包路由的配置方法有两种,一种是api的配置,另一种的静态资源的配置(不需要为静态资源再开一台Nginx)
func NewAPIMux() *mux.Router { r := mux.NewRouter() s := r.PathPrefix("/api").Subrouter() initUserApi(s) r.PathPrefix("/").Handler(http.StripPrefix("/",http.FileServer(http.Dir("web/")))) return r }api配置
/api
我们来看看userapi的初始化的方法里都做什么,当然最好单独一个文件写userapi的代码,比如user.go
func initUserApi(r *mux.Router) { s := r.PathPrefix("/user").Subrouter() s.HandleFunc("/list",UserListHandler) s.HandleFunc("/add",UserAddHandler) } func UserListHandler(w http.ResponseWriter,r *http.Request) { w.Write([]byte("user list")) } func UserAddHandler(w http.ResponseWriter,r *http.Request) { w.Write([]byte("user add")) }
/api/user/api/user/list/api/user/add
同理,一样的product,order都可以这么写,代码会非常清晰,简单精炼,
配置r.PathPrefix("/").Handler(http.StripPrefix("/",http.FileServer(http.Dir("web/"))))
嗯,就这么简单的一句,将除了api之外的所有请求导入到web目录下,以静态文件的方式处理,不再需要启动Nginx,apache之类的去处理
这就是我喜欢golang的地方,更多去操作业务本身,而不是一直敲重复的代码