在 Go 中,您可以在给定的包中定义多个 init
函数,所有这些函数都将在执行之前以未指定的顺序运行。具有多个此类函数的一个后果是无法在正常代码中调用或识别它们。例如,以下将不会编译:
func main() {
fmt.Println(init)
}
func init() { }
(参见 here 的围棋 Playground 示例) 我的问题是 - 能够拥有多个 init 函数有什么好处,如果没有多个 init 函数,我们是否能够引用或调用 init 函数?
最佳答案
能够拥有多个 init
函数的优点是 IMO 主要是它提高了局部的可读性:你可以在被初始化的东西旁边编写初始化函数,而不是远程,如果你必须集中所有的 init
功能合二为一。顺便说一句,这甚至可以在不同的源文件中。
获取假设的每个包的单个 init
函数的函数指针也可能被禁止。原因是在某些情况下,拥有这样的指针将允许“乱序”调用 init
函数,即。 之前 运行其依赖项 - 其他包中的其他 init
函数。那会破坏某些guarantees .
关于go - 表示 init 的函数变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742278/