加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang进阶(四)——路由mux的最佳实践

发布时间:2020-12-16 09:44:53 所属栏目:大数据 来源:网络整理
导读:前言 为了让golang的路由更加清晰,让路由的代码可读性更好,我们采用mux包去实现路由,并且在原有功能上做了精简 该系列文章所有代码放在这里 开始 所需的包 github.com/gorilla/mux 我们在启动http服务时设置一下路由的配置方法 func startHttp() { if err

前言

为了让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的地方,更多去操作业务本身,而不是一直敲重复的代码

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读