go-web服务
Web服务背后的关键在于平台的无关性,你可以运行你的服务在Linux系统,可以与其他Windows的asp.net程序交互,同样的,也可以通过同一个接口和运行在FreeBSD上面的JSP无障碍地通信。
目前主流的有如下几种Web服务:REST、SOAP。
router调研
httprouter, goji, chi, gorilla/mux, gorilla/context
httprouter
httprouter这个框架,给人印象就是,仿佛看到了德国人对制造业的那种精细,对性能真是要求很高,同时不乏还有诸多人性化设计,参考Features,作者的Benchmark在这里,总体来说,相同功能下的框架中,httprouter的性能非常优秀。完全可以用来代替默认的ServeMux。所以比较适合对性能要求高,路由相对简单扁平的业务,或者作为高层HTTP框架的内部模块。
goji
Goji是另一个非常优秀的框架,根据httprouter的性能测试,goji虽然没有httprouter那么快,但是也相当优秀,goji的亮点是提供请求的Context支持,好像早期使用的是自己的Context类型,现在已经改成了golang.org/x/net/context里的Context。
chi
因为goji没有内置Middleware的嵌套,所以chi的作者写了个cji用在goji上,后来该作者直接参考了goji完成了自己独立的框架chi,不仅支持golang.org/x/net/context这种Context,最给力的是原生支持Router的嵌套和Middleware的嵌套,用过Node.js中的Express框架吗?chi做的已经非常像Express了。相比httprouter和goji,chi出现的比较晚,但用起比前两者感觉功能上完善很多。
gorilla/mux, gorilla/context
gorilla/mux和gorilla/context均存在性能问题,不推荐使用。根据httprouter的性能测试,gorilla/mux表现一般,而gorilla/context则使用一个map来达到请求和Context的映射关系,并且使用Mutex来保证线程安全,所以性能不会太好,而且这种方式还需要在请求结束在map中清理相应的资源否则会内存泄露。
不过gorilla的优点是由于出现的比较早,所以文档较完善还是用户比较多。
使用golang创建RESTful服务.
简单的web服务
package main |
编译执行这个示例将运行这个server,监听8080端口。尝试使用http://localhost:8080访问server