golang进阶(四)——路由mux的最佳实践
lastsweetop · · 1079 次点击 · · 开始浏览前言
为了让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配置,是通过mux的前缀功能,把/api开头的的请求都认为是api请求,并且引出子路由,这是用mux最大的目的
我们来看看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的地方,更多去操作业务本身,而不是一直敲重复的代码
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
前言
为了让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配置,是通过mux的前缀功能,把/api开头的的请求都认为是api请求,并且引出子路由,这是用mux最大的目的
我们来看看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的地方,更多去操作业务本身,而不是一直敲重复的代码