Uber开源的FX可以帮助Go应用解耦依赖,实现更好的代码复用。原文: How to build large Golang applications using FX

Golang是一种流行编程语言,功能强大,但人们还是会发现在处理依赖关系的同时组织大型代码库很复杂。
Go开发人员有时必须将依赖项的引用传递给其他人,从而造成重用代码很困难,并造成技术(如数据库引擎或HTTP服务器)与业务代码紧密耦合。
FX是由Uber创建的依赖注入工具,可以帮助我们避免不正确的模式,比如包中的init
函数和传递依赖的全局变量,从而有助于重用代码。
本文将通过创建一个示例web应用,使用FX处理文本片段,以避免Golang代码中的紧耦合。
代码结构
首先定义代码结构:
lib/
config/
db/
http/
config.yml
main.go
utils/
该架构将应用程序的不同参与者分成自己的Go包,这样如果需要替换DB技术就会很有帮助。
每个包定义向其他包公开的接口及其实现。
main.go
文件将是依赖项的主要注入点,并将运行应用程序。
最后,utils
包将包含将在应用程序中重用的所有不依赖于依赖项的代码片段。
首先,编写一个基本的main.go
文件:
package main
import "go.uber.org/fx"
func main() {
app := fx.New()
app.Run()
}
声明FX应用程序并运行。接下来我们将看到如何在这个应用程序中注入更多特性。
模块架构
为了给应用程序添加功能,我们将使用FX模块,通过它在代码库中创建边界,使代码更具可重用性。
我们从配置模块开始,包含以下文件: