zoukankan      html  css  js  c++  java
  • 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)
    }
    
  • 相关阅读:
    字符串与数字相互转换
    CodeForces
    解救迷茫的草滩小王子
    Ubuntu18.0.4 apt换源
    N进制与十进制之间的 转换(整数,小数)
    2019-10-10问题
    千里之行始于足下,付出总会有回报
    git--基本命令篇
    C#-网络请求方法
    爬虫实战-网易云音乐
  • 原文地址:https://www.cnblogs.com/mingbai/p/go-chi.html
Copyright © 2011-2022 走看看