golang 框架 之 CHI
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的更多相关文章
- Golang框架beego和bee的开发使用
Golang语言简洁.明细,语法级支持协程.通道.err,非常诱惑人.平时也看了看Golang的语法,正苦于没有需求,我想把beego的源码搬过来看看. 首先,第一步:beego环境的搭建 在我之前看 ...
- Golang框架beego电影网爬虫小试牛刀
学习了一段时间golang,又参考课程学习了beego开发网站爬虫,项目的目录结构是: 采集的目标是豆瓣网电影,入口地址是:https://movie.douban.com/subject/19008 ...
- Golang框架Beego在Windows环境下小试牛刀
Beego官网beego官网 : https://beego.me/github : https://github.com/beego Beego安装前提: ①Go 1.1+ 以确保所有功能的正常使用 ...
- Golang+Mongodb
Golang+Mongodb打造你的第一个站点 很多人推荐MEAN来开发站点.MEAN就是M:mongodb,E:expressjs.A:angular最后的N:nodejs. 但是如果你亲身的体会到 ...
- Web桌面应用框架3:Web桌面应用开发的N种Style
研究Web桌面应用开发有一段时间了,总结了Web桌面应用开发的一些主流方式. 一.前端Style 这种方式的就是直接实现一个Web程序,再封装一个浏览器展示,相当粗暴和有效.著名的框架就是Electr ...
- 使用Golang+Mongodb打造你的第一个站点
很多人推荐MEAN来开发站点.MEAN就是M:mongodb,E:expressjs.A:angular最后的N:nodejs. 但是如果你亲身的体会到了js的嵌套回调的话你就会想换换别的办法了.虽然 ...
- golang http 中间件
golang http 中间件 源码链接 golang的http中间件的实现 首先实现一个http的handler接口 type Handler interface { ServeHTTP(Respo ...
- 从模版生成 uri Golang 的 html/template 包不太适合于这种情况
模板 - Go/Golang 框架 Echo 文档 http://go-echo.org/guide/templates/ Templates | Echo - High performance, m ...
- vue http 请求
https://github.com/vuejs/awesome-vue#http-requests vue-resource - npm https://www.npmjs.com/package/ ...
随机推荐
- 系统磁盘优化——"/var/spool/postfix/maildrop"
文件清理 最近某服务器磁盘空间告警,在排查过程中发现"/var/spool/postfix/maildrop"目录下堆积了很多小文件,起初想直接删除,但是使用rm删除是提示“参数列 ...
- 海亮OI学习游记
这只是一篇纯洁的游记,这里将要记录我在海亮十天集训的生活与被虐的历史QWQ...... Day1(2.10)刚来到海亮,嗯,这的环境真的不错. 来到机房,woc这机房的配置好高啊...这里都能打守望屁 ...
- Docker:容器间互联的应用zabbix监控项目 [十]
一.docker容器间的互联 1.创建两个容器 [root@luoahong ~]# docker run -d --name luoahong httpd:latest 8f771f043391e7 ...
- MySQL的一些基本命令笔记(4)
delete 语句嵌套子查询: delete from 表名1 where 列名 操作符 (select 列名 from 表名2 where 条件); 示例: delete from customer ...
- Ubuntu解决没有可安装候选软件包
解决方法:可以使用apt-cache search <package_name>寻找. 例如: E: 软件包 libqglviewer-dev 没有可安装候选 解决方法: apt-cach ...
- 网络学习day04_VLSM、子网划分
IP子网划分 首先,在进行子网划分的学习之前,我们先来回顾一下IP地址的相关知识,同时了解一下公有和私有IP地址: 在Internet上有千百万台主机,为了区分这些主机,人们给每台主机都分配了一个专门 ...
- 记录一次Python下Tensorflow安装过程,1.7带GPU加速版本
最近由于论文需要,急需搭建Tensorflow环境,16年底当时Tensorflow版本号还没有过1,我曾按照手册搭建过CPU版本.目前,1.7算是比较新的版本了(也可以从源码编译1.8版本的Tens ...
- $Django 路飞之显示视频,Redis存购物车数据,优惠卷生成表,优惠卷的一个领取表。(知识小回顾)
知识小回顾之json序列化问题 精髓:支持python的几种数据类型(注意不是对象,不能放对象),其次是tuple变list. ensure_ascii:默认值True,如果dict内含有non-AS ...
- POST 请求中 multipart/form-data、 application/x-www-form-urlencoded 的区别
以 Postman 为工具来看一下这两个编码类型的数据格式,假设我们需要传输的数据为 { "name": "test", "age": 18 ...
- nmap简介和使用
文章链接:https://blog.csdn.net/m1585761297/article/details/80015726 参考链接:https://www.cnblogs.com/nmap/p/ ...