0

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

func main() {
    fmt.Println(init)
}
func init() { }

(请参见此处的 Go 游乐场示例)我的问题是 - 能够拥有多个 init 函数有什么好处,如果没有多个 init 函数,我们是否能够引用或调用 init 函数?

4

1 回答 1

1

能够拥有多个功能的优势在于 IMO 主要是它提高了局部性的可读性:如果您必须将所有功能init集中到一个,您可以在正在初始化的东西旁边编写初始化函数,而不是远程编写。init顺便说一句,其中甚至可能在不同的源文件中。

init也可能禁止使用假设的 per-package-single 函数的函数指针。原因是,在某些情况下,拥有这样的指针将允许init“乱序”调用函数,即。运行其依赖项之前 -init其他包中的其他功能。那会破坏某些保证

于 2013-07-19T09:41:39.810 回答