今天看了一天go语言,了解了一下这门被称为“拥有许多最佳实践”的“21世纪C语言”。很多大佬都对go语言规范对程序员的强迫性而不满,但对于我这种菜鸡来说,能学习从另一个角度看待和解决问题的方式就是最大的收获。
go语言还是在发展中,许多工具和框架都还没有公认、成熟的轮子,而且目前go还是用在偏底层的工具和中间件开发的比较多,如果用来开发web项目,也没有像spring这样集成了一切的成熟框架,必须要自己考虑如何集成日志,服务器配置,http路由,组件管理,ORM框架集成,数据库和中间件配置和连接等。当我们在用spring的时候,由于过于方便,很少会区关心这些功能是怎么做到的,将我们的关注点聚集于业务就是spring最大的优势(然而也让写业务的人无比空虚,毕竟写已有的业务基本没有难度,招聘都只能往场景分析,性能调优和线上排错上加难度)。而当我们从另一个角度来思考的时候才能注意一些之前没思考到的细节。比如,http服务器和应用服务器通常是怎么通信的?做Java开发最常使用的tomcat这样的web容器实际上集成了http和应用服务器的功能,spring是通过部署在tomcat上的一个dispatcherServlet的连接了tomcat的http服务器功能,而如果专门的http服务器(比如nginx),那么就需要转发原始消息给应用服务器二次解码(如果http服务器本身已经解码了一次的话)。事实上的代理服务器是和应用服务器分开部署的,这样做无可非议,但是如果是流量小的单机服务器的场景,像tomcat这样的简单服务器直接用于请求处理应该会更快(不需要多一层通信)。
以上都是废话,现在进入正题。
1.工作空间与包
一个工作空间下&