一、golanginit是什么
golanginit是Go语言中一个很变态的初始化函数,它是Go语言代码里面的一个特殊函数(如init()函数),在代码加载时执行,无论我们有没有在程序中直接使用这个函数。在程序启动时,先执行依赖包的init()函数;再按照包的引用顺序去执行本包中的init()函数;最后执行main函数。需要注意的是:init()函数在代码加载时仅执行一次。
下面是使用golanginit的例子:
< package main
import "fmt"
func init() {
fmt.Println("golanginit")
}
func main() {
fmt.Println("Hello World!")
}
>
以上代码输出的结果是:
golanginit
Hello World!
二、golanginit的用处
1、对于需要初始化的变量,可以在init函数中完成初始化。因为init函数在变量声明之后执行。
示例:
< package main
import "fmt"
var name string
func init() {
name = "GoLangInit"
}
func main() {
fmt.Println("Hello " + name + "!")
}
>
以上代码输出的结果是:
Hello GoLangInit!
2、在init函数中创建goroutine,可以实现服务的后台运行。
示例:
< package main
import (
"fmt"
"time"
)
func init() {
go func() {
for {
fmt.Println("GoLangInit is running...")
time.Sleep(time.Second * 5)
}
}()
}
func main() {
fmt.Println("Hello World!")
}
>
3、在init函数中可以进行死循环的操作,比如进行一些服务的初始化、资源准备等操作。
示例:
< package main
import (
"fmt"
"net/http"
)
func init() {
go func() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World!")
})
fmt.Println("GoLangInit is running...")
http.ListenAndServe(":8888", nil)
}()
}
func main() {
fmt.Println("Starting GoLang Server...")
fmt.Println("Hello World!")
}
>
以上代码监听在本地8888端口并输出GoLangInit is running,通过访问http://localhost:8888可以看到输出Hello World!。
三、golanginit注意事项
1、不同包的init方法在import时按照声明的顺序执行。
示例:
< package main
import (
"First"
"Second"
)
func main() {
fmt.Println("Hello World!")
}
>
package First
import "fmt"
func init() {
fmt.Println("First init...")
}
package Second
import "fmt"
func init() {
fmt.Println("Second init...")
}
以上代码输出的结果是:
First init...
Second init...
Hello World!
2、同一个包中的init函数执行顺序是按照init函数的声明顺序执行。
示例:
< package main
import (
"fmt"
)
func init() {
fmt.Println("init 1")
}
func init() {
fmt.Println("init 2")
}
func init() {
fmt.Println("init 3")
}
func main() {
fmt.Println("Hello World!")
}
>
以上代码输出的结果是:
init 1
init 2
init 3
Hello World!
3、init函数不接收任何参数,也没有返回值。
4、多个包的init函数之间是互不影响的。
四、结语
本文详细介绍了golanginit的作用、使用方式、注意事项等方面的内容,相信读者已经掌握了golanginit的应用方法。在写代码过程中,善于利用init函数可以提高开发效率,减少无谓的代码冗余。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/297404.html