我最近一直在做一个相当大的 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 中文网 荣誉推
领取专属 10元无门槛券
私享最新 技术干货