Go 表示init的函数变量

Go 表示init的函数变量,go,function-pointers,init,Go,Function Pointers,Init,在Go中,您可以在给定的包中定义多个init函数,所有这些函数都将在执行之前以未指定的顺序运行。拥有多个这样的函数的一个后果是无法在普通代码中调用或识别它们。例如,以下内容将不会编译: func main() { fmt.Println(init) } func init() { } (有关Go游乐场示例,请参见) 我的问题是-能够有多个init函数有什么好处,如果没有多个init函数,我们能够引用或调用init函数吗?能够拥有多个init函数的优点主要在于它通过局部性提高可读性:如果

在Go中,您可以在给定的包中定义多个
init
函数,所有这些函数都将在执行之前以未指定的顺序运行。拥有多个这样的函数的一个后果是无法在普通代码中调用或识别它们。例如,以下内容将不会编译:

func main() {
    fmt.Println(init)
}
func init() { }
(有关Go游乐场示例,请参见)
我的问题是-能够有多个init函数有什么好处,如果没有多个init函数,我们能够引用或调用init函数吗?

能够拥有多个
init
函数的优点主要在于它通过局部性提高可读性:如果必须集中所有
init
函数,您可以在初始化的对象旁边编写初始化函数,而不是远程编写对一。顺便说一句,它甚至可以在不同的源文件中


获取假设的每个包单个
init
函数的函数指针也可能被禁止。原因是,在某些情况下,拥有这样的指针将允许调用
init
函数“无序”,即在运行其依赖项之前-其他包中的其他
init
函数。这是不确定的。

啊,这是一个很好的观点,可以在其他包中无序调用init(尽管实际上这不会是一个问题,因为init没有导出)。此外,不能引用
init
将递归排除在外,这将进一步简化问题。