1,特性

golang 的 http框架已经有很多,究其原因:go 的net/http 已经做了大部分工作,封装一个框架的工作量,没有那么的大。

不过呢,林子大了鸟也就多了,部分框架的代码质量实在不敢恭维,另有一些框架则绑定了一堆东西,完全跟 清爽简洁的风格 背道而驰,用起来总有一种 笨重 的感觉!

chi 也是一个 http 框架,不过这货是不同的。

**用这个框架,别人看你代码可能会怀疑你没用框架! **

其特点:
只做核心的事情
rest api
快(路由快,累赘少)
分组路由
**完全只用 net/http + 标准库实现!**
清爽(代码清爽,体积清爽)
常见功能用中间件搞,可拔插

2,为啥快

路由算法用的是 前缀树,最快的索引算法

比哈希表都快!

真.轻量级,代码真的很少,没那么多弯弯绕绕。

只用 net/http, 标准库 再加上 高质量的代码。

3,可扩展性好

jwt、Timeout、RealIP 等众多中间件,随用随取。

厉害的是:因为其handler完全兼容 net/http,所以 社区所有兼容net/http 的中间件都能拿来直接用!

4,关于其轻量级

极致的简洁高效,同时就会缺少一些不那么常用的但又会用到的功能;这时候对比其他框架,会发现这个CHI,功能略少。

不过,即使不考虑其高效,这是小缺点的同时,也是小优点。不天生绑定,起手式就更加轻便,需要的时候再加,也有更多的选择;可以灵活的择其优者而从之。

4,有多快

BenchmarkChi_Param        	 3000000	       607 ns/op	     432 B/op	       3 allocs/op
BenchmarkChi_Param5 2000000 935 ns/op 432 B/op 3 allocs/op
BenchmarkChi_Param20 1000000 1944 ns/op 432 B/op 3 allocs/op
BenchmarkChi_ParamWrite 2000000 664 ns/op 432 B/op 3 allocs/op
BenchmarkChi_GithubStatic 2000000 627 ns/op 432 B/op 3 allocs/op
BenchmarkChi_GithubParam 2000000 847 ns/op 432 B/op 3 allocs/op
BenchmarkChi_GithubAll 10000 175556 ns/op 87700 B/op 609 allocs/op
BenchmarkChi_GPlusStatic 3000000 566 ns/op 432 B/op 3 allocs/op
BenchmarkChi_GPlusParam 2000000 652 ns/op 432 B/op 3 allocs/op
BenchmarkChi_GPlus2Params 2000000 767 ns/op 432 B/op 3 allocs/op
BenchmarkChi_GPlusAll 200000 9794 ns/op 5616 B/op 39 allocs/op
BenchmarkChi_ParseStatic 3000000 590 ns/op 432 B/op 3 allocs/op
BenchmarkChi_ParseParam 2000000 656 ns/op 432 B/op 3 allocs/op
BenchmarkChi_Parse2Params 2000000 715 ns/op 432 B/op 3 allocs/op
BenchmarkChi_ParseAll 100000 18045 ns/op 11232 B/op 78 allocs/op
BenchmarkChi_StaticAll 10000 108871 ns/op 67827 B/op 471 allocs/op

5,一个小例子

package main

import (
"net/http"
"github.com/go-chi/chi"
) func main() {
r := chi.NewRouter()
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("welcome"))
})
http.ListenAndServe(":3000", r)
}

golang 框架 之 CHI的更多相关文章

  1. Golang框架beego和bee的开发使用

    Golang语言简洁.明细,语法级支持协程.通道.err,非常诱惑人.平时也看了看Golang的语法,正苦于没有需求,我想把beego的源码搬过来看看. 首先,第一步:beego环境的搭建 在我之前看 ...

  2. Golang框架beego电影网爬虫小试牛刀

    学习了一段时间golang,又参考课程学习了beego开发网站爬虫,项目的目录结构是: 采集的目标是豆瓣网电影,入口地址是:https://movie.douban.com/subject/19008 ...

  3. Golang框架Beego在Windows环境下小试牛刀

    Beego官网beego官网 : https://beego.me/github : https://github.com/beego Beego安装前提: ①Go 1.1+ 以确保所有功能的正常使用 ...

  4. Golang+Mongodb

    Golang+Mongodb打造你的第一个站点 很多人推荐MEAN来开发站点.MEAN就是M:mongodb,E:expressjs.A:angular最后的N:nodejs. 但是如果你亲身的体会到 ...

  5. Web桌面应用框架3:Web桌面应用开发的N种Style

    研究Web桌面应用开发有一段时间了,总结了Web桌面应用开发的一些主流方式. 一.前端Style 这种方式的就是直接实现一个Web程序,再封装一个浏览器展示,相当粗暴和有效.著名的框架就是Electr ...

  6. 使用Golang+Mongodb打造你的第一个站点

    很多人推荐MEAN来开发站点.MEAN就是M:mongodb,E:expressjs.A:angular最后的N:nodejs. 但是如果你亲身的体会到了js的嵌套回调的话你就会想换换别的办法了.虽然 ...

  7. golang http 中间件

    golang http 中间件 源码链接 golang的http中间件的实现 首先实现一个http的handler接口 type Handler interface { ServeHTTP(Respo ...

  8. 从模版生成 uri Golang 的 html/template 包不太适合于这种情况

    模板 - Go/Golang 框架 Echo 文档 http://go-echo.org/guide/templates/ Templates | Echo - High performance, m ...

  9. vue http 请求

    https://github.com/vuejs/awesome-vue#http-requests vue-resource - npm https://www.npmjs.com/package/ ...

随机推荐

  1. Blender 快捷键笔记

    A Select All/Unselect All shift+A Create Z 切换wireframe和solid mode TAB Start or quit EditMode B Activ ...

  2. AWT 新建窗口

    新建一个窗口 包 import java.awt.*; 定义 Frame frm_Draw = new Frame("Text"); 初始化代码 public void Frame ...

  3. eclipse hadoop环境搭建 查看HDFS文件内容

    1.下载插件 hadoop-eclipse-plugin-2.5.2.jar放入eclipse/plugin 2.准备hadoop-2.5.0-cdh5.3.6 使用WinSCP远程连接虚拟机,复制h ...

  4. Centos7 设置vim 显示文本不同颜色

    Centos7 设置vim 显示文本不同颜色 本人在查找设置 centos7 vim 文本显示颜色时, 学习了作者: luffy5459 (博客连接:https://blog.csdn.net/fei ...

  5. 五子棋.html

    二维数组的定义 , canvas对象的使用 二维数组:以下用new,其实简化 [] 即可, var tArray = new Array(); //先声明一维 for(var k=0;k<i;k ...

  6. gitlab服务器搭建

    当然喜欢英文的可以参考官方文档:https://about.gitlab.com/downloads/ 1.  根据自己的操作系统选择相应的安装方法,我这边是阿里云 centos 7的 sudo yu ...

  7. python加密

    ""#line:4 __all__ =[]#line:6 class OO0O0O000O0O0O000 :#line:8 ""#line:9 def __in ...

  8. Re-enable extensions not coming from Chrome Web Store on Chrome v35+ (with enhanced security)

    1. Add the --enable-easy-off-store-extension-install flag when you start chrome (create shortcut, ed ...

  9. JAVA 列表输入学生的信息

    package Code429; import java.util.ArrayList; public class CodeArrayListStudent { public static void ...

  10. Java实现大数乘法运算

    基本思路:将输入的两个大数以字符串的形式存储,然后转化成整型数组存储,通过整型数组进行乘法运算(采用分治的思想) 即乘法分配律,如AB*CD=AC(AD+BC)BD,将两个数组逐位相乘的结果对位存放在 ...