需求场景

我们有一批struct对应的方法,同时对应的有这个structNew方法,而传递的参数是在首次启动应用程序时通过配置或者命令参数来决定的,这个时候我们就需要根据这些参数来NewDB(param1), NewLogger(param2)来生成实例,而这个实例将在应用程序的生命周期内不再改变,它可能渗透到应用程序的每一个package

常规做法

这个时候我们经常的做法是:

db := NewDB(param1)
logger := NewLogger(param2)
cmd.root.Run(db, logger)

然后这个实例logger 将贯穿我们的每一个包中(因为我们无时无刻需要在代码中打log来记录重要的信息)

缺点

上面的做法需要将logger传递到每一个package中,显得罗嗦,一旦有一个地方没有传递,那么就无法使用logger实例.

图示

标签: none

评论已关闭