美文网首页
golang使用mux实现http自定义路由

golang使用mux实现http自定义路由

作者: 5djindoudou | 来源:发表于2020-07-03 23:30 被阅读0次

最近在做坐席管理的服务,其中需要对上层业务提供外部的REST接口,去对坐席、坐席组、租户域进行增删改查操作。

采用了gorilla开发的mux实现自定义路由。
package地址如下:
github.com/gorilla/mux

Golang中http的设计非常轻量,且具有很高的扩展性,上手非常简单。参考gorilla给出的wiki就可以轻易设计出自定义的路由功能。
这对于像我这样的c语言开发者而言,是非常友善的。

下面直接上代码,讲述一下。

我设计了以下三种URL分别定位三种资源(域、组、坐席):

  /v1/voip/hlr/mange/domain
  /v1/voip/hlr/mange/group
  /v1/voip/hlr/mange/user

于是,定义了一个二维map的全局变量,第一维map中可以是URL中的资源目录,第二维map中存放该资源支持的方法(POST/GET/PUT/DELETE等):

type hlrHTTPHandlers map[string]map[string]interface{}

二维map的全局变量初始化时,稍微繁琐一点。就是第一维map中的每个value需要 调用make生成map结构。例如:

    handlers := make(hlrHTTPHandlers)    
    //域路由
    handlers["domain"] = make(map[string]interface{})

用mux实现路由,URL路径可以具有变量。 它们使用{name}或{name:pattern}格式定义。 如果未定义正则表达式模式,则匹配的变量将是下一个斜杠之前的任何内容。 例如:

    //路由绑定
    r := mux.NewRouter()
    r.HandleFunc("/v1/voip/hlr/mange/{category}", hlrHTTPFunc)
    r.HandleFunc("/v1/voip/hlr/mange/{category}/{id:[0-9]+}", hlrHTTPSubFunc)

这些name用于创建路由变量的映射,可以调用mux.Vars()来检索它们。

绑定的一条路由:

func hlrHTTPFunc(w http.ResponseWriter, r *http.Request) {

    vars := mux.Vars(r)

    w.WriteHeader(http.StatusOK)

    fmt.Fprintf(w, "Category: %v\n", vars["category"])

}

绑定的另外一条路由:

funchlrHTTPSubFunc(w http.ResponseWriter, r *http.Request) {

    vars := mux.Vars(r)

    w.WriteHeader(http.StatusOK)

    fmt.Fprintf(w, "Category: %v id: %v\n", vars["category"], vars["id"])

}

golang相比c/c++,还是容易开发的。相同的一个项目,拿c语言实现以后再拿go重构一遍,单单从代码量上来看,代码量减少了七成之多。

学习之路漫漫,坑要一个个踩。

相关文章

  • golang使用mux实现http自定义路由

    最近在做坐席管理的服务,其中需要对上层业务提供外部的REST接口,去对坐席、坐席组、租户域进行增删改查操作。 采用...

  • Golang 第三方库学习 · mux

    本文为转载,原文:Golang 第三方库学习 · mux 介绍 mux 是一个用来执行http请求的路由和分发的第...

  • mux 源码分析

    前言 mux 是go实现的轻量的路由,可以基于host,path,query匹配。 使用示例: 源码实现 Rout...

  • golang路由mux的介绍及基本使用

    github地址: https://github.com/gorilla/mux#matching-routes[...

  • 一个简单的Golang实现的Socks5 Proxy

    前两天,使用Golang实现了一个简单的HTTP Proxy,具体实现参见 一个简单的Golang实现的HTTP ...

  • mux路由中间件的使用

    mux路由中间件的使用 代码示例: 运行程序,通过postman或其它http请求工具发送请求,下面是测试的结果。...

  • golang http 路由

    来看看 http 自带的路由功能。 阅读前留几个问题 如果要自己实现路由,该怎么做? 默认路由的结构,搜索方式是什...

  • Vue-router 路由拦截

    路由拦截 当某些页面需要权限访问时,可以使用路由拦截对用户权限进行判断。 实现 在自定义路由时添加自定义字段 re...

  • mux源码解读

    mux简介 go语言中一个强大的web路由,在这里我准备理解其原理后实现一个python版的mux,同时也为了进一...

  • Linkerd 核心模块 --- 路由

    路由是 Linkerd 的核心功能:接受请求(HTTP,Thrift,Mux或其他协议),并将该请求发送到正确的目...

网友评论

      本文标题:golang使用mux实现http自定义路由

      本文链接:https://www.haomeiwen.com/subject/vkqyqktx.html