在Go中,您可以在给定包中定义多个init
函数,所有这些函数都将在以未指定的顺序执行之前运行。具有多个这样的函数的一个结果是在普通代码中不可能调用或识别它们。例如,以下内容将无法编译:
func main() {
fmt.Println(init)
}
func init() { }
(有关Go游乐场示例,请参阅here) 我的问题是 - 能够提供多个init函数有什么优势,如果不是多个init函数,我们能够引用或调用init函数吗?
答案 0 :(得分:1)
能够拥有多个init
函数的优点是IMO主要是它提高了地区的可读性:您可以在初始化的东西旁边编写初始化函数,而不是远程编写,如果您必须集中所有{ {1}}功能于一。那么,BTW,甚至可以在不同的源文件中。
也可能禁止使用假设的per-package-single init
函数的函数指针。原因是在某些情况下,拥有这样的指针会允许调用init
函数“乱序”,即。 之前运行其依赖项 - 其他包中的其他init
函数。这会破坏某些guarantees。