go init方法会被调用几次
时间: 2023-01-29 07:48:52 浏览: 66
在 Go 语言中,init 函数会在程序启动时被自动调用,并且每个源文件中的 init 函数都会被调用。
因此,如果你的程序中有多个源文件,那么所有的 init 函数都会被调用。
在单个源文件中,init 函数也可以被声明多次,所有的 init 函数都会在程序启动时依次被调用。
例如:
```
package main
import "fmt"
func init() {
fmt.Println("init1 called")
}
func init() {
fmt.Println("init2 called")
}
func main() {
fmt.Println("main called")
}
```
在上面的程序中,init1 函数和 init2 函数都是 init 函数,它们都会在程序启动时被调用。
因此,在这个例子中,init 函数会被调用两次。
相关问题
go 某个包被多个包引入其中的init函数 会被调用多次吗
是的,如果某个包被多个包引入,那么在程序运行时,这个包的`init`函数会被调用多次。
在 Go 语言中,每个包都可以有一个`init`函数,这个函数在包被引入时会被自动调用。如果一个包被多个其它包引入,那么在程序运行时,这个包的`init`函数就会被调用多次。
例如,如果包 `A` 和包 `B` 都引入了包 `C`,那么在程序运行时,包 `C` 的`init`函数就会被调用两次。
举个例子,假设我们有如下三个文件:
```
// main.go
package main
import "fmt"
import "A"
import "B"
func main() {
fmt.Println("main")
}
// A.go
package A
import "C"
func init() {
fmt.Println("A")
}
// B.go
package B
import "C"
func init() {
fmt.Println("B")
}
// C.go
package C
import "fmt"
func init() {
fmt.Println("C")
}
```
当我们运行程序时,会看到输出结果如下:
```
C
C
A
B
main
```
可以看到,包 `C` 的`init`函数被调用了两次,因为包 `A` 和包 `B` 都引入了包 `C`。
go 同一个项目的某个包被其他包引入,其中的init函数 会被调用多次吗
在 Go 中,当一个包被多个包同时引入时,这个包中的 `init` 函数只会被调用一次。只有当一个包第一次被引入时,它的 `init` 函数才会被调用。例如,在同一个项目中,如果包 A 和包 B 都引入了包 C,那么包 C 中的 `init` 函数只会被调用一次。