用 Go 写一个服务容器

我最近一直在做一个相当大的 API 项目,里面包括很多路由规则( routes )、服务接口( services )和处理函数( handlers )等。首先,我注意到 文件的启动过程开始越来越臃肿。

为了避免设置全局的服务接口,我使用共享结构体( struct )将服务接口与处理函数绑定在一起。举个例子:

main.go

user_handler.go

这些代码工作的很好,但是,你会发现 main.go 中,我只是写了很少的启动过程,仅仅包含一个处理函数和一个持久化数据( repository )。(译注:用这种方式写代码比较麻烦且臃肿)。

于是我想用 Go 写一个容器。我找不到一个喜欢的第三方库来解决这个事情。所以,想出了下面这段代码。

注意这段代码的每个方法都用了 来避免容器的并发问题。

现在代码可以这样写。。。

现在的 main.go

同步方面的代码参考自 itsmontoya ,向他致敬

现在我已经将启动过程很简洁地封装成了包。我觉得一个有 PHP 语言背景的人在考虑这段语法实现时候会参考 pimple 框架。

我已经把这个抽象成了自己的库,实现在这里 。

via: https://ewanvalentine.io/writing-a-service-container-in-go/

作者:Ewan Valentine

译者:j.zhongming

校对:rxcai

本文由 GCTT 原创编译,Go 中文网 荣誉推

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171221G05BV900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券