go - 表示 init 的函数变量

标签 go function-pointers init

在 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/

相关文章:

java - init.gradle 从命令行读取属性

go - make([]int, 0)、[]int{} 和 *new([]int) 之间有什么区别?

mysql - CREATE PROCEDURE语句中的SQL语法错误1604

c - MinGW 中的 strstr 和 StrStrI 以及 C 中的函数作为参数

Python __init__ * 参数

swift - 初始值设定项未用于 append 数据(swift3)

go - 如何使用基本身份验证提供静态文件?

HTTP 服务不工作

c - 如何从C中的函数中获取函数名和参数个数?

c++ - 在 ARM mbed 中使用回调时 undefined reference