SILSUER BLOG

天地有正气,杂然赋流形

golang设计模式之抽象工厂模式

抽象工厂模式 简介 wiki: 抽象工厂模式(英语:Abstract factory pattern)是一种软件开发设计模式。抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端...

golang设计模式之工厂方法模式

工厂方法模式 wiki: 工厂方法模式(英语:Factory method pattern)是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。” 上面是 维基百科 中对工厂方法的定义,在...

golang设计模式之简单工厂模式

简单工厂模式 wiki: 简单工厂模式并不属于 GoF 23 个经典设计模式,但通常将它作为学习其他工厂模式的基础,它的设计思想很简单,其基本流程如下: 首先将需要创建的各种不同对象(例如各种不同的 Chart 对象)的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类;然后提供一个...

参考Laravel制作基于golang的路由包

概述 最近在开发自己的 Web 框架 Bingo, 也查看了一些市面上的路由工具包,但是都有些无法满足我的需求, 例如,我希望获得一些 Laravel 框架的特性: 快速的路由查找 动态路由支持 中间件支持 路由组支持 而市面上最快的就是 httprouter ,这里本来几个月前我改造过一次: 改造h...

基于go开发日志处理包

基于go开发日志处理包 最近在自己开发的go语言web框架 Bingo 中需要一个日志处理功能 , 看了看标准库的log包, 发现功能过于简单,所以想重新造个轮子,单独抽出来作为一个模块,辅助框架进行开发 [bingo-log] 是为了完成 bingo 的日志功能而开发的一个第三方包,不依赖框架,可单独在其他项目中使用, Github地址: bingo-log 安装和使用在 READ...

golang设计模式之单例模式

单例模式 wiki百科: 单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环...

TWIG源码解析

TWIG 源码解析 Twig简介 Twig是php世界里最快的模版引擎,可以快速将模版编译为html代码 运行流程 首先要建立一个加载器 loader: // 传入模版根目录 $loader = new Twig_Loader_Filesystem('/path/to/templates'); 依据根目录建立环境变量...

使用solr搭建搜索服务器

使用solr搭建搜索服务器 前言 solr 是一个用 java 写的搜索服务器,支持分布式集群部署等各种特性,现在看来应该是 目前使用范围最广的搜索服务器了 研究了三天,因为想直接部署成分布式的,网上的各种教程都是太过久远的了,绕来绕去就死在配置文件里了 所以先不想做分布式的问题了,先搭一个单机版的,压力上来了再装zookeeper做分布式 安装 系统为 CentOS7 ...

golang程序优雅关闭与重启

bingo run 命令集合

golang程序优雅关闭与重启 何谓优雅 当线上代码有更新时,我们要首先关闭服务,然后再启动服务,如果访问量比较大,当关闭服务的时候,当前服务器很有可能有很多 连接,那么如果此时直接关闭服务,这些连接将全部断掉,影响用户体验,绝对称不上优雅 所以我们要想出一种可以平滑关闭或者重启程序的方式 是谓优雅。 思路 服务端启动时多开启一个协程用来监听关闭信号 当协程接收到关闭信...

像Laravel-Artisan一样执行go命令

像Laravel-Artisan一样执行go命令 前言 作为一个laravel重度患者,artisan是一个不可或缺的功能,可以说这是laravel的开发脚手架 可以快速创建需要的文件,加快开发速度 而我目前正在开发的bingo框架正是受到laravel启发,希望可以快速构建web应用 而一个脚手架是必不可少的东西,所以我实现了一个bingo sword 工具 laravel-a...