在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
女主宣言 应用编程课最后一节,本节课李钢老师分享了很多他在Go语言开发中使用到的工具和一些实践经验以及心得体会,下面就让我们来一起感受学习这篇收官之作吧! PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦! The International Space Station, Oct. 4, 2018 by NASA IOTD 今天我给大家介绍下我使用Go语言做过的一些编程实践。 1 golog 项目地址: 无论我们做什么开发,log 都是个强需求,所以先给大家介绍下我开发的 golog. 首先看下里面最重要的几个数据结构间的关系:
对底层写操作的封装,写的对象可以是文件、队列、ES等,当前提供如下writer实现:
对写操作加buffer提升写性能,实现时有如下要点:
formater是将要记录的log内容发往writer之前做一次格式化,例如添加统一的log日期、终端输出添加颜色等,当前有如下实现:
这个是程序中记录log要使用到的对象,当前提供了simpleLogger这个实现,是一种同步的方式(写操作阻塞程序执行)
将写入操作放到单独的goroutine中从而提升程序性能,实现要点如下:
更详细的使用,可以参考: https://www.jianshu.com/p/20d0f74c3c08 2 shardmap 项目地址: go中的原生map在多个goroutine同时读写时是需要加锁的,为了提升性能,核心思想是减少锁粒度,shardmap就是这样开发的: go1.8之后的官方包中提供了sync.Map用于解决map的并发读写问题,但我自己测试没有shardmap性能好,读者有兴趣可以自己试下。 更详细的使用,可以参考: https://www.jianshu.com/p/090e00f12b3e 3 redis 项目地址: redis可用的包很多,我自己实现的这个包,底层driver部分使用了redigo,考虑到实际的生产环境使用,我自行实现了如下机制:
更详细的使用,可以参考: https://www.jianshu.com/p/fb498f30dff2 4 goconsumer 项目地址: 对异步队列的使用目前在开发中也是必不可少的,这里提供了一个消费处理框架,目前支持:
整体处理框架如图: 里面的对象关系如下:
从各种队列中做消费的对象,例如kafka、nsq等
分配消息到worker中处理,可以在这里实现自己的分配算法达到顺序消费的目的,当前提供下面两种实现:
消息处理对象,干实际业务工作的。
启动一个消费任务框架,执行的入口,我在task_test.go中有个demo实现,可供大家参考。 5 gobox-demo 项目地址: gobox-demo 是我开发的一个通用的模版项目,基于这个项目我有一些使用Go语言做项目开发的心得想要介绍给大家。 controller 和 action 的组织 我见过的大多数项目,都喜欢把controlelr和action放到一个代码文件中,项目功能越多,文件就越长。 实际中这样做会给开发和维护带来很大的不利,所以我把他们拆开,每个action作为一个代码文件,这样很清晰: svc 的组织6 其他 以上都是我在开发过程中最常用到的一些工具,我的原则向来是追求精简,团队没用到的功能就不添加。 另外,一些涉及到公司内部的代码,例如上线操作无法放到这里展示,但都是会有单独的目录去组织这些。 总之一句话,我力求做到项目组织合理,命名清晰,层次分明,希望让大家从项目的组织结构上就能判断出哪部分功能放在哪里,任何会让人有歧义的地方都要改善。 结束语 应用编程课已经全部讲完了,希望我的经验对大家有帮助,有认识不当的地方还请指正,谢谢大家! HULK一线技术杂谈 由360云平台团队打造的技术分享公众号,内容涉及云计算、数据库、大数据、监控、泛前端、自动化测试等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享 原文链接:https://mp.weixin.qq.com/s/wfuwOY1-Rij_yO98f-11Jw来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31555491/viewspace-2220349/,如需转载,请注明出处,否则将追究法律责任。 转载于:http://blog.itpub.net/31555491/viewspace-2220349/ |
请发表评论