我知道golang允许在一个包中甚至在一个文件中使用多个init。我想知道为什么?例如,如果一个pkg有很多文件,我们可以写多个init然后我们可能会丢失我们应该把init放到哪里,如果我们在一个pkg中有多个init,我们也会对init命令感到困惑。 (我的意思是这更好吗?我们只能有1个init,然后我们可以有一些initXXX,然后把它们放到init中,看起来很干净。)在代码结构视图中执行此操作有什么好处?
这个问题可能有些基于意见,但使用多个包init()
函数可以使您的代码更易于阅读和维护。
如果源文件很大,通常按照某种逻辑顺序排列其内容(例如类型,变量声明,方法等)。允许多个init()
函数使您可以将初始化代码放在它们应该初始化的部分附近。如果不允许这样做,你将被迫每个包使用一个init()
函数,并将所有内容放入其中,远离它们初始化所需的变量。
是的,拥有多个init()
函数可能需要关注执行顺序,但是知道使用多个init()
函数不是必需的,它只是一种可能性。你可以写init()
函数没有“副作用”,不依赖于其他init()
函数的完成。
如果这是不可避免的,你可以创建一个“主”init()
,明确控制其他“孩子”init()
函数的顺序。
控制其他初始化函数的“master”init()
示例:
func init() {
initA()
initB()
}
func initA() {}
func initB() {}
在上面的例子中,initA()
将始终在initB()
之前运行。
规范中的相关部分:Package initialization。