
Golang
文章平均质量分 84
breaksoftware
这个作者很懒,什么都没留下…
展开
-
Golang反射机制的实现分析——reflect.Type类型名称
现在越来越多的java、php或者python程序员转向了Golang。其中一个比较重要的原因是,它和C/C++一样,可以编译成机器码运行,这保证了执行的效率。在上述解释型语言中,它们都支持了“反射”机制,让程序员可以很方便的构建一些动态逻辑。这是C/C++相对薄弱的环节,而Golang却有良好的支持。本系列,我们将通过反汇编Golang的编译结果,探究其反射实现的机制。(转载请指...原创 2019-01-08 20:09:44 · 9581 阅读 · 1 评论 -
使用Golang反射技术实现一套有默认值的配置解析库
在实际开发中,我们往往会给一个逻辑设计一套配置文件,用于根据不同环境加载不同配置。比如生产环境和测试环境数据库的地址不一样,我们就需要在配置文件中设置不同的值。但是配置文件中又有一些相同值的配置项,比如数据库的名称等。难道相同的配置要像下面这样写多次吗?一种简单的办法是:我们设置一个默认项(default)用于填充相同的值,然后在不同环境中填充不同的值。这样我们在取pro、pre、dev和test环境的配置时,会让它们和default取合集,从而变成一个完整的配置。原创 2023-08-03 23:00:02 · 808 阅读 · 0 评论 -
使用Golang实现一套流程可配置,适用于广告、推荐系统的业务性框架——构建
比如自定义的ExampleA1Handler是以Handler结尾,这样在底层我们就知道将其构造成一个Handler对象。所有的自动构建,都依赖于配置文件。于是我们设计了ConcreteConfManager来遍历配置文件目录,这个目录在我们创建构建器时传入的。原创 2023-08-03 18:09:06 · 993 阅读 · 0 评论 -
使用Golang实现一套流程可配置,适用于广告、推荐系统的业务性框架——组合应用
在中,我们看到了各种组合Handler的组件,如HandlerGroup和Layer。这些组件下面的子模块又是不同组件,比如LayerCenter的子组件是Layer。如果此时我们希望某个Layer只要执行一个HandlerGroup,还需要设计一个Divider来满足Layer的设计。这样就会导致整个框架非常难以使用。为了解决这个问题,我们让所有组件(除了Divider)都继承了HandlerBaseInterface。这样我们就可以保证各个组件可以通过统一的接口调用。原创 2023-08-03 16:04:36 · 1019 阅读 · 0 评论 -
使用Golang实现一套流程可配置,适用于广告、推荐系统的业务性框架——简单应用
在诸如广告、推荐等系统中,我们往往会涉及过滤、召回和排序等过程。随着系统业务变得复杂,代码的耦合和交错会让项目跌入难以维护的深渊。于是模块化设计是复杂系统的必备基础。这篇文章介绍的业务框架脱胎于线上多人协作开发、高并发的竞价广告系统,在实践中不停被优化,直到易于理解和应用。原创 2023-08-03 14:58:35 · 1317 阅读 · 0 评论 -
Colly源码解析——框架
Colly是一个使用golang实现的数据抓取框架,我们可以使用它快速搭建类似网络爬虫这样的应用。本文我们将剖析其源码,以探析其中奥秘。(转载请指明出于breaksoftware的csdn博客) Collector是Colly的核心结构体,其中包含了用户对框架行为的定义。一般情况下,我们可以使用NewCollector方法构建一个它的指针// NewColl...原创 2018-11-27 19:08:21 · 3018 阅读 · 0 评论 -
Colly源码解析——结合例子分析底层实现
通过《Colly源码解析——框架》分析,我们可以知道Colly执行的主要流程。本文将结合http://go-colly.org上的例子分析一些高级设置的底层实现。(转载请指明出于breaksoftware的csdn博客)递归深度 以下例子截取于Basic c := colly.NewCollector( // Visit only domains: ...原创 2018-11-28 22:04:59 · 3071 阅读 · 0 评论 -
Gin源码解析和例子——路由
Gin是一个基于golang的net包实现的网络框架。从github上,我们可以看到它相对于其他框架而言,具有优越的性能。本系列将从应用的角度来解析其源码。(转载请指明出于breaksoftware的csdn博客) 本文我们将分析其路由的原理。先看个例子(源于github)func main() { // Disable Console Color //...原创 2018-11-30 23:48:42 · 6525 阅读 · 3 评论 -
Gin源码解析和例子——中间件(middleware)
在《Gin源码解析和例子——路由》一文中,我们已经初识中间件。本文将继续探讨这个技术。(转载请指明出于breaksoftware的csdn博客) Gin的中间件,本质是一个匿名回调函数。这和绑定到一个路径下的处理函数本质是一样的。 再以Engine的Default方法为例func Default() *Engine { debugPrin...原创 2018-12-03 18:38:08 · 6290 阅读 · 2 评论 -
Golang反射机制的实现分析——reflect.Type方法查找和调用
在《Golang反射机制的实现分析——reflect.Type类型名称》一文中,我们分析了Golang获取类型基本信息的流程。本文将基于上述知识和经验,分析方法的查找和调用。(转载请指明出于breaksoftware的csdn博客)方法package mainimport ( "fmt" "reflect")type t20190107 struct { ...原创 2019-01-08 20:19:06 · 5342 阅读 · 0 评论 -
使用反射和泛型简化Golang查询数据库代码的方案
使用反射和泛型简化Golang语言数据库查询代码原创 2023-01-18 16:10:12 · 1122 阅读 · 0 评论