golanginit全方面解析

一、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/zh-hant/n/297404.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-28 12:15
下一篇 2024-12-28 12:15

相關推薦

發表回復

登錄後才能評論