内容简介:今天我给大家介绍下我使用Go语言做过的一些编程实践代码在:https://github.com/goinbox/golog无论我们做什么开发,log都是个强需求,所以先给大家介绍下我开发的golog
今天我给大家介绍下我使用 Go 语言做过的一些编程实践
golog
代码在:https://github.com/goinbox/golog
无论我们做什么开发,log都是个强需求,所以先给大家介绍下我开发的golog
首先看下里面最重要的几个数据结构间的关系:
- writer
对底层写操作的封装,写的对象可以是文件、队列、ES等,当前提供如下writer实现:
- FileWriter写文件
- FileWithSplitWriter写文件,可自动按照天、小时为单位分文件写入
- ConsoleWriter写终端
- buffer
对写操作加buffer提升写性能,实现时有如下要点:
- 实现为writer的装饰者
- 提供单独的goroutine做autoflush
- formater
formater是将要记录的log内容发往writer之前做一次格式化,例如添加统一的log日期、终端输出添加颜色等,当前有如下实现:
- simpleFormater在消息前面加上loglevel和时间
- webFormater在simpleFormater的基础上添加clientIp和logId
- consoleFormater为终端输出添加颜色
- logger
这个是程序中记录log要使用到的对象,当前提供了simpleLogger这个实现,是一种同步的方式(写操作阻塞程序执行)
- async
将写入操作放到单独的goroutine中从而提升程序性能,实现要点如下:
- asyncLogger实现为对logger的装饰者
- 提供单独的goroutine做写操作
更详细的使用,可以参考:https://www.jianshu.com/p/20d0f74c3c08
shardmap
代码在:https://github.com/goinbox/shardmap
go中的原生map在多个goroutine同时读写时是需要加锁的,为了提升性能,核心思想是减少锁粒度,shardmap就是这样开发的:
go1.8之后的官方包中提供了sync.Map用于解决map的并发读写问题,但我自己测试没有shardmap性能好,读者有兴趣可以自己试下。
更详细的使用,可以参考:https://www.jianshu.com/p/090e00f12b3e
redis
代码在:https://github.com/goinbox/redis
redis可用的包很多,我自己实现的这个包,底层driver部分使用了redigo,考虑到实际的生产环境使用,我自行实现了如下机制:
- 懒加载机制,即只有真正和 redis 做交互时才创建网络连接
- 操作失败自动重连机制
- 提供连接池以提高性能
- pipeling封装
- 事物封装
更详细的使用,可以参考:https://www.jianshu.com/p/fb498f30dff2
goconsumer
代码在:https://github.com/goinbox/goconsumer
对异步队列的使用目前在开发中也是必不可少的,这里提供了一个消费处理框架,目前支持:
- 消息非顺序消费
- 消息顺序消费
整体处理框架如图:
里面的对象关系如下:
- consumer
从各种队列中做消费的对象,例如kafka、nsq等
- dispatcher
分配消息到worker中处理,可以在这里实现自己的分配算法达到顺序消费的目的,当前提供下面两种实现:
- simpleDispatcher,这个做消息的随机分发,无需顺序的消费均可以使用
- specifyDispatcher,自己指定消息的分发方法,需要顺序消费等特殊消费需求可以使用
- worker
消息处理对象,干实际业务工作的。
- task
启动一个消费任务框架,执行的入口,我在task_test.go中有个demo实现,可供大家参考。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 应用编程基础课第三讲:Go编程基础
- 应用编程基础课第三讲:Go编程基础
- 应用编程基础课第五讲:Go项目实践
- Web 应用架构基础课
- URLOS应用开发基础课——Docker基础镜像Alpine入门教程
- 项目管理 101 基础课:如何制定有效的计划?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
跟我学Java Web
2010-9 / 58.00元
Java Web开发是目前最流行、使用最广泛的网站开发技术。《跟我学Java Web》通过对Java Web开发中所运用到的各种技术循序渐进地进行讲解,使读者能尽快掌握开发Web应用程序的方法。《跟我学Java Web》内容包括搭建Web开发环境、HTML相关技术基础知识、JavaScript相关技术基础知识、JSP技术基础知识、Servlet技术基础知识、搭建MySQL数据库开发环境、JDBC技......一起来看看 《跟我学Java Web》 这本书的介绍吧!