golang在一个包中允许多个init的目的是什么?

问题描述 投票:9回答:1

我知道golang允许在一个包中甚至在一个文件中使用多个init。我想知道为什么?例如,如果一个pkg有很多文件,我们可以写多个init然后我们可能会丢失我们应该把init放到哪里,如果我们在一个pkg中有多个init,我们也会对init命令感到困惑。 (我的意思是这更好吗?我们只能有1个init,然后我们可以有一些initXXX,然后把它们放到init中,看起来很干净。)在代码结构视图中执行此操作有什么好处?

go init
1个回答
10
投票

这个问题可能有些基于意见,但使用多个包init()函数可以使您的代码更易于阅读和维护。

如果源文件很大,通常按照某种逻辑顺序排列其内容(例如类型,变量声明,方法等)。允许多个init()函数使您可以将初始化代码放在它们应该初始化的部分附近。如果不允许这样做,你将被迫每个包使用一个init()函数,并将所有内容放入其中,远离它们初始化所需的变量。

是的,拥有多个init()函数可能需要关注执行顺序,但是知道使用多个init()函数不是必需的,它只是一种可能性。你可以写init()函数没有“副作用”,不依赖于其他init()函数的完成。

如果这是不可避免的,你可以创建一个“主”init(),明确控制其他“孩子”init()函数的顺序。

控制其他初始化函数的“master”init()示例:

func init() {
    initA()
    initB()
}

func initA() {}
func initB() {}

在上面的例子中,initA()将始终在initB()之前运行。

规范中的相关部分:Package initialization

另见相关问题:What does lexical file name order mean?

© www.soinside.com 2019 - 2024. All rights reserved.