gorilla/mux 小巧玲珑而十分高效,兼容go自带的http。下载源码到本地,编写如下示例:

package mainimport ("encoding/json""fmt""github.com/gorilla/mux""io/ioutil""net/http""runtime/debug""time"
)//错误码常量
const (INVALID_BODY = 1INVALID_PARA = 2INNER_ERROR  = 3
)//请求包体
type Req struct {Msg string `json:"msg"`
}//回复包体
type Rsp struct {Status int64       `json:"status"`Msg    string      `json:"msg"`Data   interface{} `json:"data,omitempty"`
}//路由器
var Router *mux.Router
type Process func(query map[string][]string, body []byte, rsp *Rsp)func GenHandler(pro Process) func(w http.ResponseWriter, r *http.Request) {return func(w http.ResponseWriter, r *http.Request) {//url paramquery := r.URL.Query()//post datasbody, e := ioutil.ReadAll(r.Body)defer r.Body.Close()if e != nil {w.WriteHeader(500)return}//processvar rsp Rspfmt.Printf("Req : %v\n", string(sbody))pro(query, sbody, &rsp)fmt.Printf("Rsp : %d, %v\n", rsp.Status, rsp.Data)//rspbuf, e := json.Marshal(&rsp)if e != nil {w.WriteHeader(500)}w.Write([]byte(buf))}
}//服务
func ProcessEcho(query map[string][]string, body []byte, rsp *Rsp) {//解析url参数var isEcho boolecho := query["echo"]if echo != nil {//整型值使用strconv转换//state, e := strconv.ParseInt(echo[0], 10, 32)if echo[0] == "true" {isEcho = true} else {isEcho = false}}//解析post数据var req Reqif e := json.Unmarshal(body, &req); e != nil {fmt.Printf("unmarshal fail %v [%v]\n", e, string(body))rsp.Status = INVALID_BODYrsp.Msg = "Invalid Req Body"return}//其他服务操作//回复数据if isEcho {rsp.Data = req.Msg}return
}func main() {defer func() {if err := recover(); err != nil {debug.PrintStack()}}()Router = mux.NewRouter()//cgi routerRouter.HandleFunc("/echo_svr", GenHandler(ProcessEcho))svr := http.Server{Addr:         ":38080",ReadTimeout:  3 * time.Second,WriteTimeout: 3 * time.Second,Handler:      Router,}svr.ListenAndServe()
}

这个示例足够满足大多数的人的http服务需求,更复杂的需求,参考mux官网使用范例。

gorilla/mux实现http服务示例相关推荐

  1. mysql的请求分发,基于 gorilla/mux 实现路由匹配和请求分发:服务单页面应用

    基于 gorilla/mux 实现路由匹配和请求分发:服务单页面应用 由 学院君 创建于1年前, 最后更新于 1年前 版本号 #1 1279 views 0 likes 0 collects 随着前后 ...

  2. 使用gorilla/mux增强Go HTTP服务器的路由能力

    今天这篇文章我们将会为我们之前编写的 HTTP服务器加上复杂路由的功能以及对路由进行分组管理.在之前的文章<深入学习用 Go 编写HTTP服务器>中详细地讲了使用 net/http进行路由 ...

  3. 路由复用器--gorilla/mux

    简介 gorilla/mux是 gorilla Web 开发工具包中的路由管理库.gorilla Web 开发包是 Go 语言中辅助开发 Web 服务器的工具包.它包括 Web 服务器开发的各个方面, ...

  4. Negroni和Gorilla/mux 解析 Golang

    如有错误欢迎纠正, 有缺漏欢迎补充 参考资料: https://github.com/urfave/negroni/blob/master/translations/README_zh_CN.md h ...

  5. gorilla/mux类库解析

    简介 gorilla/mux实现了一个请求路由和分发的Go框架."mux"的意思是"HTTP request multiplexer",和标准包http.Ser ...

  6. Go 每日一库之 gorilla/mux

    简介 gorilla/mux是 gorilla Web 开发工具包中的路由管理库.gorilla Web 开发包是 Go 语言中辅助开发 Web 服务器的工具包.它包括 Web 服务器开发的各个方面, ...

  7. gorilla/mux 翻译

    mux https://github.com/gorilla/mux gorilla / mux实现了一个请求路由器和分发器,用于将传入的请求与其各自的处理程序进行匹配. 名称mux代表" ...

  8. 路由(gorilla/mux)

    安装gorilla/mux go get -u github.com/gorilla/mux 默认的http包无法处理复杂的请求路由,例如从url中拆分出参数.该第三方包可方便的处理. 创建路由 r ...

  9. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

最新文章

  1. FPGA 时序约束系列之周期约束
  2. FastDFS+Nginx实现文件服务器(转载)
  3. python m http_非常简单的Python HTTP服务
  4. 在XML里的XSD和DTD以及standalone的使用
  5. delphi 一些知识文章地址记录(正则)
  6. 2018清华计算机类专业录取分数线,清华大学2018-2019年各省各专业录取分数线
  7. linux 优盘分区,怎么在Linux系统下使用NTFS的U盘或者是分区以及移动硬盘-使用工具NTFS-3G...
  8. ros开发增加clion常用模板及初始化配置(一)
  9. UmiJS基础UmiJS+Dva
  10. msm8953 uart配置
  11. 微博Mysql数据库规范
  12. 模拟购物车系统(添加、修改、查询、结算)(Java实现)
  13. No rule to make target /opt/ros/kinetic/lib/liborocos-kdl.so.1.3.2问题解决
  14. H5播放B站源的flv视频
  15. PAKDD2020:阿里巴巴算法大赛中的得与失
  16. centos查看磁盘转速_Centos磁盘读写检测进行性能判断
  17. 笔试中怎么答产品设计类题目
  18. springboot 单元测试使用 @value读取不到值, yml的两个坑
  19. hihoCoder--139周 买零食
  20. 关于S32K汽车通用MCU,NXP工程师总结的10个超实用Tips

热门文章

  1. Oracle中select SEQ_YX.nextval from dual是什么意思
  2. android storage 路径,风儿带你了解Android存储路径。
  3. 使用Neo4j+InteractiveGraph实现豆瓣电影知识图谱可视化
  4. python sort 多级排序_python sort、sorted高级排序技巧
  5. Unity初级案例-愤怒的小鸟:三:07猪的受伤+08弹弓划线操作+09死亡和加分特效的制作+10游戏逻辑的判定,实现多只小鸟的飞出
  6. 实现图书增删改查和分页显示图书信息
  7. react项目中实现打印预览功能
  8. springmvc+mybatis 无极限树形结构菜单
  9. 单片机PWM输出控制直流电机(89c51系列、stc12c5a60s2系列)
  10. 【盲信道估计】基于matlab的LMS盲信道估计QPSK仿真